2010-04-15 19 views
5

我需要動態創建記錄器,所以用後from here和反射器的幫助下,我已經成功地動態地創建記錄器,但我想知道我是否應該擔心別的東西......我不知道至極影響可以做到。log4net:動態創建一個記錄器,我應該擔心什麼?

public static ILog GetDyamicLogger(Guid applicationId) 
    { 
     Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository(); 
     RollingFileAppender roller = new RollingFileAppender(); 
     roller.LockingModel = new log4net.Appender.FileAppender.MinimalLock(); 
     roller.AppendToFile = true; 
     roller.RollingStyle = RollingFileAppender.RollingMode.Composite; 
     roller.MaxSizeRollBackups = 14; 
     roller.MaximumFileSize = "15000KB"; 
     roller.DatePattern = "yyyyMMdd"; 
     roller.Layout = new log4net.Layout.PatternLayout(); 
     roller.File = "App_Data\\Logs\\"+applicationId.ToString()+"\\debug.log"; 
     roller.StaticLogFileName = true; 

     PatternLayout patternLayout = new PatternLayout(); 
     patternLayout.ConversionPattern = "%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"; 
     patternLayout.ActivateOptions(); 

     roller.Layout = patternLayout; 
     roller.ActivateOptions(); 
     hierarchy.Root.AddAppender(roller); 

     hierarchy.Root.Level = Level.All; 
     hierarchy.Configured = true; 

     DummyLogger dummyILogger = new DummyLogger(applicationId.ToString()); 
     dummyILogger.Hierarchy = hierarchy; 
     dummyILogger.Level = log4net.Core.Level.All; 
     dummyILogger.AddAppender(roller); 

     return new LogImpl(dummyILogger); 
    } 

    internal sealed class DummyLogger : Logger 
    { 
     // Methods 
     internal DummyLogger(string name) 
      : base(name) 
     { 
     } 
    } 

乾杯。

+1

你需要一個很好的理由使用代碼,而不是使用配置文件,而不是:-) – 2010-04-15 19:05:31

+3

的原因是,我的應用程序在運行時動態創建的社區,我希望爲每一個日誌文件。 – vtortola 2010-04-16 18:32:24

回答

2

我要說的是,你不必擔心在代碼中創建記錄器。它是創建它們的受支持方法之一。在應用程序運行時,您確實喪失了更改內容的能力(除非您爲其編寫代碼)。這只是使用配置文件的好處之一。

+0

我很擔心,因爲LoggerImpl是「內部」,這樣顯然是不應該被實例化。然後,我創建了一個副本(DummyLogger)具有相同的實現,我用它來創建一個ILogImpl,但我不知道是否log4net的是避免你創建你自己的情況下,對任何具體的原因:P – vtortola 2010-04-16 19:47:03

相關問題