2016-09-28 74 views
1

我正在使用ServiceStack 4.5啓動一個新項目。有沒有辦法通過編程來配置log4net?在本文檔中,我發現ServiceStack 4.5以編程方式配置log4net

LogManager.LogFactory = new Log4NetFactory(configureLog4Net: true); 

我已將此添加到APPHOST類的構造函數。但是,這似乎假定你把配置到App.config文件(我正在做一個Windows服務自託管)。

在其他一些項目中,我寫了一單,然後用log4net的API做配置:

private static void CreateFileAppender(ref Logger bedInventoryLogger, string logFilePath, Level logLevel, int maxFileSizeInMb, bool filterNh) 
    { 
     var filePatternLayout = new PatternLayout 
     { 
      ConversionPattern = "%date; [%thread]; %-5level; %logger; [%type{1}.%method]; - %message%newline" 
     }; 
     filePatternLayout.ActivateOptions(); 
     var bediLogFileAppender = new RollingFileAppender 
     { 
      File = logFilePath, 
      AppendToFile = true, 
      MaximumFileSize = $"{maxFileSizeInMb}MB", 
      MaxSizeRollBackups = 5, 
      RollingStyle = RollingFileAppender.RollingMode.Size, 
      LockingModel = new FileAppender.MinimalLock(), 
      Layout = filePatternLayout, 
      StaticLogFileName = true, 
      Threshold = logLevel 
     }; 
     if (filterNh) 
     { 
      bediLogFileAppender.AddFilter(new LoggerMatchFilter 
      { 
       LoggerToMatch = "NHibernate", 
       AcceptOnMatch = false 
      }); 
      bediLogFileAppender.AddFilter(new LoggerMatchFilter 
      { 
       LoggerToMatch = "NHibernate.SQL", 
       AcceptOnMatch = false 
      }); 
      bediLogFileAppender.AddFilter(new LoggerMatchFilter 
      { 
       LoggerToMatch = "FluentNHibernate", 
       AcceptOnMatch = false 
      }); 
     } 
     bediLogFileAppender.ActivateOptions(); 
     bedInventoryLogger.AddAppender(bediLogFileAppender); 
    } 

自從我用了幾個日誌,附加目的地ETD,想關閉NHibernate的記錄(我使用NHibernate 4作爲ORM)等等。我發現在C#中配置比在XML中更方便。

是否有可能將它與ServiceStack掛鉤,或者我是否更好地直接使用Log4Net?

回答

3

默認ServiceStack log4net的適配器不允許你只是在這2個文件,這基本上只是前進的調用log4net的注入配置log4net的實例,不過適配器類易於複製和修改它們是: