2013-05-30 20 views
7

私は最近、ここのユーザーのおかげでlog4netを始めました。とにかく、私は設定した単一のログファイルに自動的にすべてのConsole.Write()とDebug.Write()を記録したいと思っています。また、私はlog4netについて何も知らないConsole/Debugステートメントも持つ多くのクラスライブラリを使用しています。これらは、設定に基づいて自動的にログファイルにも記録できますか?これは可能ですか?log4net Logging Debug.WriteLine and 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をリダイレクトすることができ、私はローリングログファイルに記録したい何

ビルド)、カスタムを書いてlog4netにTrace.WriteLine 210はlog4netにログを記録します。単純な実装の顕著なビットは以下のようになります。より完全な実装は、ロガー名の構成をサポートする場合があり

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

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

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

次に、あなたのアプリケーション構成ファイル内のようなものを、これを構成します、使用するロギングレベル、おそらくメッセージの内部バッファリングなどがあります。

Console.WriteLineについてはTextWriterConsole.SetOutを呼び出してリダイレクトでき、TextWriterはlog4netにログすることができます。

+0

Joe、私はあなたの答えを受け入れるように私の質問に答えるデバッグとConsole.WriteLinesをlog4netに。しかし、私は各プロジェクトにlog4netを追加してデバッグ文を変更する方が簡単だと分かっています。ありがとうございました。 – JMooney

+0

誰かがこのデッドロックを経験していますか? – dmarlow