Log.Info
'u kullandığımız bir kayıt sistemimiz var ve bir ILogger
'a yazıyor.ThreadLocal ve bekleyin
Artık arka planda çalışan birden çok çalışanımız var ve bunların kendi günlüklerine yazılmasını istiyoruz. Yani her işçiye İşçi başı verilir. Bu görev yürütüldüğünde kaydedilen her şey kendi logger'ına iletilmelidir.
Burada bir yöntem oluşturmayı düşünüyoruz Log.SetLoggerForCurrentThread, ThreadLocal ile uygulayarak. yürütme kodu şöyle görünecektir:
public class Worker
{
ILogger _Logger;
public void ExecuteTask()
{
Log.Info("This goes to the 'Global' logger");
using (Log.SetLoggerForCurrentThread(_Logger))
{
Log.Info("This goes to local logger");
DoWork();
}
}
private async void DoWork()
{
Log.Info("Starting...");
// SomeMethod does some logging,
// that also needs to be forwared to the local logger
var value = await SomeDeepDomainClass.SomeMethod();
// if we use ThreadLocal, and this thread has been reused,
// it could be a completely different logger that is now attached.
Log.Info("Ended...");
}
}
Sorular
- biz bekliyor kullanmak, iplik olabilir teori süreci başka işçinin çalışma, böylece yerel kaydediciler kadar karıştırma içinde.
- Benzer bir şey yapmak için en iyi desen nedir? Hangi depolama yöntemini kullanabilirim?
CultureInfo
bunu nasıl yapıyor?
Arka plan bilgileri
bu İşçi çoğu artık ve onlar da bir konsol uygulamasından (bir kez) tetiklenir daha bir Azure WorkerRole örneği içinde çalışacak, ancak.
'CultureInfo' her yönetilen iplik başında kurulduğundan - o Task'' bağımsız bu. Bir 'Task'den oturum açmak istiyorsanız 'Log.SetLoggerForCurrentThread' açık kullanımını öneriyorum. Bunu açıkça düşündüğünüzü ve telafi ettiğinizi gösterir. –
Bir cevap üzerinde çalışmaya başlamadan önce, log4net'in ücretsiz olduğunu ve sorunlarınızın çoğunu zaten çözdüğünü bilmelisiniz. –
Merhaba @GuillaumeCR, haklı olabilirsiniz, ancak benzer modeller için genel bir programlama sorusu olarak görün. –