はい、複数のアペンダーに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以上でログインします...
名前空間でもログレベルを設定できますか?ネームスペース固有のログをINFOに設定できる間に、ルートにはそのログレベルがなければならないのですか? – codecompleting
@codecompleting:非常に詳細なフィルタリングを行うことができます。ルートは基本レベルのロギング動作に過ぎません。上記の* update *を参照してください。 –