2009-09-17 25 views
17

से कोड से log4net के लिए फ़ाइल लॉगिंग सक्षम करें क्यों दुनिया में निम्न परीक्षण विफल रहता है? (यह xunit में) मैंने इसे विभिन्न परिशिष्टों के साथ आजमाया है और यह कुछ भी लिखता नहीं है हालांकि लॉग ऐसा लगता है कि यह लिखने के लिए तैयार है। अंततः मैंने इसका परीक्षण करने के लिए अपना स्वयं का एपेंडर बनाया।कॉन्फ़िगरेशन

public class TestAppender : AppenderSkeleton { 
     public event Action<LoggingEvent> AppendCalled = delegate { }; 
     protected override void Append(LoggingEvent loggingEvent) { 
      AppendCalled(loggingEvent); 
     } 
    } 
    public class Class1 { 
     private TestAppender _appender = new TestAppender(); 
     public Class1() { 
      log4net.Util.LogLog.InternalDebugging = true; 
      Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository(); 
      Logger rootLogger = hierarchy.Root; 
      rootLogger.Level = Level.All; 
      Logger coreLogger = hierarchy.GetLogger("abc") as Logger; 
      coreLogger.Level = Level.All; 

      coreLogger.Parent = rootLogger; 
      PatternLayout patternLayout = new PatternLayout(); 
      patternLayout.ConversionPattern = "%logger - %message %newline"; 
      patternLayout.ActivateOptions(); 
      _appender.Layout = patternLayout; 
      _appender.ActivateOptions(); 
      coreLogger.AddAppender(_appender);    
     } 
     [Fact] 
     public void Test() { 
      bool called = false; 
      _appender.AppendCalled += e => called = true; 
      var log = LogManager.GetLogger("abc"); 
      log.Debug("This is a debugging message"); 
      Thread.Sleep(TimeSpan.FromSeconds(2)); 
      log.Info("This is an info message"); 
      Thread.Sleep(TimeSpan.FromSeconds(2)); 
      log.Warn("This is a warning message"); 
      Thread.Sleep(TimeSpan.FromSeconds(2)); 
      log.Error("This is an error message"); 
      Assert.True(called); 
     } 
} 
+0

परीक्षण में आपको क्या जानकारी मिलती है? या क्या ऐसा लगता है कि कुछ भी नहीं कहा जाता है? –

+0

परिशिष्ट कभी नहीं कहा जाता है - कोई विचार क्यों नहीं। लॉग 4नेट कॉन्फ़िगरेशन अभी भी कई परियोजनाओं पर इसका उपयोग करने के बाद भी मुझे एक ब्लैक बॉक्स का थोड़ा सा है। –

उत्तर

40

मैं कोड से log4net को कॉन्फ़िगर करने के लिए हमेशा नीचे दिए गए कोड का उपयोग करता हूं। बहुत अच्छा काम करता है!

Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository(); 
hierarchy.Root.RemoveAllAppenders(); /*Remove any other appenders*/ 

FileAppender fileAppender = new FileAppender(); 
fileAppender.AppendToFile = true; 
fileAppender.LockingModel = new FileAppender.MinimalLock(); 
fileAppender.File = Server.MapPath("/") + "log.txt"; 
PatternLayout pl = new PatternLayout(); 
pl.ConversionPattern = "%d [%2%t] %-5p [%-10c] %m%n%n"; 
pl.ActivateOptions(); 
fileAppender.Layout = pl; 
fileAppender.ActivateOptions(); 

log4net.Config.BasicConfigurator.Configure(fileAppender); 

//Test logger 
ILog log =LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 
log.Debug("Testing!"); 
+1

वाह धन्यवाद, मैं बेसिककॉन्फिगरेटर के बारे में कभी नहीं जानता था। कॉन्फ़िगर चरण –

+0

मुझे पता है कि यह एक पुरानी पोस्ट है, लेकिन क्या आपको web.config में कोई XML कॉन्फ़िगरेशन करने की आवश्यकता है? –

2

बस वहाँ बाहर एक अनुमान फेंक ...

आप XmlConfiguration अपने विधानसभा में परिभाषित किया गया है?

क्या आप इसे अपनी परीक्षा परियोजना में भूल गए थे?

[assembly: log4net.Config.XmlConfigurator(Watch = true)] 

जो आमतौर पर मुझे हर बार एक बार जलता है।

+0

अच्छी कॉल मैं आम तौर पर लॉग 4नेट महल विंडसर एकीकरण का उपयोग करता हूं इसलिए मैं भूल गया - लेकिन मैं एक एक्सएमएल फ़ाइल का उपयोग नहीं कर रहा हूं! –

0

फिर भी यह नहीं कह सकते क्यों उपरोक्त कोड काम नहीं करता है, लेकिन मैं ठीक से कॉन्फ़िगर और के साथ सभी विन्यास कोड की जगह मेरी appender का उपयोग करने के log4net गया:

log4net.Config.BasicConfigurator.Configure(_appender); 

here से।

संबंधित मुद्दे