2010-03-29 18 views
5

Log4Net'i logging bileşeni olarak kullanarak bir WPF masaüstü uygulamasında Logging uygulamasına başladım. İşte benim sorum: Basit bir masaüstü uygulamasında, logger'ımın App sınıfı (App.xaml.cs) gibi bir özellik olarak bulamaması için herhangi bir neden var mı?Log4Net?

public partial class App : Application 
{ 
     private static readonly ILog p_Logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 

     public ILog Logger 
     { 
      get { return p_Logger; } 
     } 

     #endregion 
    } 
} 

bana akla logger

cevap

7

nedenlerinden biri yaylar çağırmak için izin verecek O: App sınıfının statik yapıcı, daha önce ILog örneğini başlatmasını olacak çalışacaktır senin kodunun ilk bit olduğundan log4net'i yapılandırdınız. Bu nedenle, ILog örneğini kullanamazsınız.

public partial class App : Application 
{ 
    private static ILog log; 

    static App() 
    { 
     XmlConfigurator.Configure(); 
     log = LogManager.GetLogger(typeof(App)); 
    } 
} 

BTW, o MethodBase iş gerçekten beni yalakalık yapar: Genel olarak, bunun yerine böyle bir şey yapmak istiyorum. Neden sadece kullanıyorsunuz? Yine de doğrulama yapmadan kod kopyalayıp yapıştırma yapmamalısınız ... ve typeof(App), refactoring araçlarıyla gayet iyi çalışacaktır ...

2

App nesnesinde global logger kullanmama için bir neden buldum. İyi çalışıyor, ancak her sınıfın içinden kullanacağı bir günlükçünün faydalanmasının bir avantajı var - Günlük mesajlarımı yazmayı daha kısa ve daha kolay hale getirir.

Bu nedenle, oturum açacak her sınıfta GetLogger() öğesini çağırıyorum ve kaydedici için kullanılacak adı belirtiyorum. Yazdığım her hata mesajında ​​sınıf adının girilmesi beni rahatlatır

// Get logger 
var logger = LogManager.GetLogger("OpenFile"); 

: Örneğin, benim OpenFile yönteminde, böyle bir logger alabilirsiniz. App() yapıcısında hala log4net'i yapıyorum, çünkü sadece bir kez yapılması gerekiyor. Bu bana şöyle bir günlük mesajı verir:

2010-03-29 15:51:41,951 OpenFile [DEBUG]- Data file opened. 

Kent'in cevabı hala kabul cevaptır ama ben öğrendiklerini iletmekten düşündüm.

+1

+1. –

3

bir küresel örneğini kullanarak karşı vakaların bir çift. Her sınıf için bir logger kullanarak, sınıf yapınızı otomatik olarak takip eden logger hiyerarşilerinin faydasını

  • elde edin.
  • daha az bağlantı (sınıflarınız artık Uygulama sınıfına bağlı değildir). Kendi bulgularınızı paylaşmak için
  • +0

    Benden iyi puanlar +1 –