2011-10-25 15 views
1

2つのログクラスを明示的に作成するのか、または基本的に特定の基準を満たすログメッセージを作成するappenderであるか、コード内に2つのアペンダがある場合、デバッグエラー用と1つは製品エラー用です。log4netでは、使用するアペンダーを指定しますか?

あなたのコードでは、単一のログメソッドを使用し、アペンダーの設定に応じて、メッセージが記録されます。特定の名前空間からログされるか、特定のログレベルです。

したがって、1つのログエントリが2つのログファイルに書き込まれる可能性がありますか?

答えて

5

はい、複数のアペンダーに1つのログステートメントを送信できます。それぞれの基準を満たしている限り、各アペンダーを使用します。

たとえば、このconfigセクションを取る、ファイルにすべてのメッセージをログに記録し、また、イベントビューアに警告やエラーをログに記録します。:

<log4net> 
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <file value="c:\logs\MySite"/> 
     <appendToFile value="true"/> 
     <datePattern value=".yyyy-MM-dd.\l\o\g"/> 
     <rollingStyle value="Date"/> 
     <MaxSizeRollBackups value="14"/> 
     <param name="StaticLogFileName" value="false"/> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%d{HH:mm:ss.fff} [%thread] %-5level %logger{1} - %m%n"/> 
     </layout> 
    </appender> 
    <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender"> 
     <applicationName value="Trading.Web"/> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%d{HH:mm:ss.fff} [%thread] %-5level %logger{1} - %m%n"/> 
     </layout> 
     <filter type="log4net.Filter.LevelRangeFilter"> 
     <param name="LevelMin" value="WARN"/> 
     <param name="LevelMax" value="ERROR"/> 
     </filter> 
    </appender> 
    <root> 
     <level value="DEBUG"/> 
     <appender-ref ref="RollingFileAppender"/> 
     <appender-ref ref="EventLogAppender" /> 
    </root> 
    </log4net> 

ので、この:

_log.Debug("This is a debug message"); 

のみ表示されます(イベントログアペンダのフィルタ条件を満たしていないため)

しかし、この:

_log.Error("This is an error message."); 

は、ログファイルとイベントビューアの両方に記録します。

UPDATE:あなたのフィルタリング質問には、あなたが持っていた場合:高いWARNまたは場合

<root> 
    <level value="DEBUG"/> 
    <appender-ref ref="RollingFileAppender"/> 
</root> 

<!-- Print only messages of level WARN or above in the namespace Com.Foo --> 
<logger name="Com.Foo"> 
    <level value="WARN" /> 
</logger> 

はその後Com.Fooの下にあるすべてのものがログに記録されますが、他のすべてはDEBUG以上でログインします...

+0

名前空間でもログレベルを設定できますか?ネームスペース固有のログをINFOに設定できる間に、ルートにはそのログレベルがなければならないのですか? – codecompleting

+0

@codecompleting:非常に詳細なフィルタリングを行うことができます。ルートは基本レベルのロギング動作に過ぎません。上記の* update *を参照してください。 –

関連する問題