2016-12-12 40 views
0

私たちのシステムでは、log4netを介してTrace.Write()(古い方法)とログの両方を同時に使用します。log4net - TraceListenerとTraceAppender - 2つのログの方法を混合する

これらの方法を統一したいと思います。 Log4NetTraceListenerという名前のカスタムリスナーを追加しました。これはTraceからのメッセージを処理してログファイルに入れます。簡体字コード:

public class Log4NetTraceListener : System.Diagnostics.TraceListener 
{ 
public override void Write(string message) 
{ 
      _log.Debug(message); 
} 

それは正常に動作しますが、何私もやりたいことも、定期的にlog4netの方法のためのVisual Studioの出力ウィンドウにログインしています。

私の最初のアイデアは、log4net構成にTraceAppenderを追加することでした。それは正常に動作しますが、リスナとの関係では無限ループを引き起こします。

このような問題を処理するための「きれいな」方法はありますか?たぶん、リスナーやアペンダーのフィルタリングの一部ですか?すべてTrace.Write()呼び出しがLog4NetTraceListenerクラスを通って、Trace.Write()通話が終了しないように、あなたのlog4netのロギングの残りの部分は、あなたがあなたのログ階層を構成することができない(すなわち、それは普通の.Debug().Error()呼び出しだ)ないことを行くと仮定すると

+0

Log4net設定にDebugAppenderを追加できませんか? – thudbutt

答えて

0

TraceAppenderを呼び出します。例えば

<log4net> 
    <appender name="TraceAppender" type="log4net.Appender.TraceAppender"> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] - %message%newline"/> 
    </layout> 
    </appender> 
    <root> 
    <level value="ALL" /> 
    <appender-ref ref="TraceAppender" /> 
    </root> 
    <logger name="Log4NetTraceListener"> 
    <level value="OFF" /> 
    </logger> 
</log4net> 

これはLog4NetTraceListener_logフィールドがLog4NetTraceListenerのロガーの名前を与えられたと仮定します。また

あなたは、Visual Studioの[出力]ウィンドウに、デバッグ出力をしながらDebugAppender代わりのTraceAppender、それは意志、を使用している場合。

関連する問題