2013-05-30 120 views
7

我最近遇到了log4net,感謝這裏的用戶。無論如何,我想將每個Console.Write()和Debug.Write()自動記錄到我配置的單個日誌文件中。另外,我還使用了許多類庫,它們也具有對log4net一無所知的控制檯/調試語句。這些也可以根據配置自動記錄到日誌文件中嗎?這有可能嗎?log4net記錄Debug.WriteLine和Console.WriteLine

我想記錄在滾動日誌文件是什麼:

Console.WriteLine("console statement"); 
Debug.WriteLine("debug statement"); 

實例化的記錄器:

private static readonly ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 
private static void InitializeLogger() 
{ 
    XmlConfigurator.Configure(); 
} 

整個的app.config:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> 
    </configSections> 

    <log4net> 
    <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <param name="File" value="SubToolsPortServerTest.log"/> 
     <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
     <appendToFile value="true" /> 
     <rollingStyle value="Size" /> 
     <maxSizeRollBackups value="2" /> 
     <maximumFileSize value="1MB" /> 
     <staticLogFileName value="true" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <param name="ConversionPattern" value="%d [%t] %-5p %c %m%n"/> 
     </layout> 
    </appender> 

    <root> 
     <level value="ALL" /> 
     <appender-ref ref="LogFileAppender" /> 
    </root> 
    </log4net> 
</configuration> 

回答

7

您可以重定向Debug.WriteLine(在調試通過編寫自定義和Trace.WriteLine到log4net 210登錄到log4net。一個簡單的實現的顯着位看起來像:

public class Log4NetTraceListener : TraceListener 
{ 
    ILog _logger = ...; 

    public override void WriteLine(string message) 
    { 
     _logger.Info(message); 
    } 
} 

你會那麼在你的應用程序配置文件是這樣配置的:

<system.diagnostics> 
    ... 
    <listeners> 
     <add name="traceListener" type="MyNamespace.Log4NetTraceListener,MyAssembly" /> 
    </listeners> 
    ... 
</system.diagnostics> 

更完整的實現可能支持記錄器名稱的配置,要使用的日誌級別以及消息的某些內部緩衝。

對於Console.WriteLine你可以通過調用Console.SetOut重定向到自己的自定義TextWriter,和您的自定義TextWriter可以登錄到log4net的。

+0

喬,我接受你的答案,因爲它回答了我有關輸出Debug和Console.WriteLines到log4net的問題。但是,我發現將log4net添加到每個項目並更改調試語句會更容易。謝謝。 – JMooney

+0

任何人都會遇到這樣的僵局? – dmarlow