2015-10-21 36 views
5

Dahili olarak geliştirilmiş bir kayıt sistemimiz var ve aynı anda birden fazla eki kullanabilmek gibi log4net'in faydalarını kazanmak istedik. Eski günlük kayıt sistemini özel bir log4net ekleyicisine taşımaya karar verdik. Eski sistem doğru bir şekilde yapılandırıldığında bu işe yaradı, ancak eski logger aslında bir WCF istemcisine yazıyor (bu, mantıksal kayıt için yavaşlatıyor, diğer log4net ekleyicileriyle bağlantı kurmak istediğimiz için neden oluyordu) ve son zamanlarda WCF yapılandırması tam olarak ne değildi olmalıydı. Bu olduğunda, uygulama tamam çalışır gibi görünüyordu, ama belli ki eski sistem için özel eklenti çalışma değildi. Diğer ekleyiciler iyi çalıştı, ancak özel mirasçıdan çıktı yok ve bir sorun olduğunu belirten hata mesajları yoktu.özel bir log4net eklentisi içinde günlük/hata işleme

"Özyinelemeli" günlüğünü işlemek için uygun bir yol nedir, bu özel bir log4net ekleyicisinin içinden günlüğe kaydediliyor? onun statik nesneden Log4net kapma ve appender içine günlüğü: Ben naif çözüm çalıştı

public class MyCustomAppender : AppenderSkeleton 
{ 

    protected override void Append(log4net.Core.LoggingEvent loggingEvent) 
    { 
     try 
     { 
      // something which throws here... 
     } 
     catch (Exception ex) 
     { 
      log4net.LogManager.GetLogger(this.GetType()).Error(this.GetType().ToString() + ": error during append", ex); 
     } 
    } 
} 

Bu sefil başarısız oldu, "System.Threading.LockRecursionException: Yinelemeli okuma kilidi satın almalar bu modda izin verilmez." Yeterince adil; naif bir çözümdü.

Ben de denedim: durum işleyici

this.ErrorHandler.Error(this.GetType().ToString() + ": error during append", ex); 

mümkün görünüyordu olarak bunun doğru şey olabilir. Belli bir şey olmadı.

Bir ekleyicideki log4net aracılığıyla hataları günlüğe kaydetmenin bir yolu var mı? Veya doğrudan windows olay günlüğüne sabit kod yazımı gibi bir şey yapmak zorunda mıyım? Açıkçası, sonsuz özyineleşme tehdidi büyüktür, fakat ben, işletmecilerden birinin çalışmayı başaramadığını bilerek, operatöre izin vermenin bir yolu olacağını düşünürdüm.

JR en kısa sürede soru haberi olarak Tabii

cevap

3

, bir şey hatırladım. log4net'in appSettings içinde bir hata ayıklama anahtarı vardır.

<appSettings> 
    <!--this is wonderful magic--> 
    <add key="log4net.Internal.Debug" value="true" /> 
</appSettings> 

Şimdi ConsoleAppender (benim kullandığım diğer appender) özel appender istisna mesajı söndürüldü: o zaman ayarını büyü ayarlamak, catch bloğunun içinde

this.ErrorHandler.Error(this.GetType().ToString() + ": error during append", ex); 

: Bu kodu kullanılır. JR

0

üst kısımda bu satırı olduğundan emin olun: System.Threading kullanarak;

+0

Asıl sorunun ne olduğunu unuttum, ancak amacım, çalışma zamanında log4net mekanizmasına giriş yapmak için özel bir log4net ekleyicisinin alınmasıydı. Bildiğim kadarıyla, bir "kullanma" ifadesi sadece derleme zamanında işleri düzeltir. Hiç derleme problemim olmadı. Çalışma zamanında neyin yanlış gittiğini görmem gerekiyordu. – jrv