ファイル アペンダ FileA、FileB、および FileC があります。FileA をすべてキャッチしたいので、ルート要素に追加します (これについては以下で詳しく説明します)。FileB と FileC は特定のメッセージに使用し、これらのアペンダーごとに名前付きロガーを作成します。コードでは、次のようにほとんどのメッセージに使用しているログをロードします。
private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
他のロガーは、このようにロードします
private static readonly log4net.ILog commandLog = log4net.LogManager.GetLogger("LoggerFileB");
何が起きているかというと、LoggerFileB で期待どおりの結果が得られているということです。つまり、特別なメッセージのみです。問題は、これらのメッセージが、ルートに追加したキャッチオールである LoggerFileA にも表示されることです。キャッチオールをルート要素に追加する代わりに、特定の名前付きインスタンスを作成することもできますが、出力のロガー名として呼び出しタイプが必要です。名前付きロガーを作成するということは、%logger がタイプではなくログの名前を出力することを意味します。私が欲しいものを正確に取得する方法はありますか (ロガー名をタイプとして表示するキャッチオールですが、他の名前付きロガーに記録されたメッセージは表示しません)? うまくいけば、私は何かが欠けていて、簡単な解決策があります。
この状況での log.config の例を次に示します。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<log4net>
<appender name="FileA" type="log4net.Appender.RollingFileAppender">
<file value="FileA.txt" />
...snip...
</appender>
<appender name="FileB" type="log4net.Appender.RollingFileAppender">
<file value="FileB.txt" />
...snip...
</appender>
<appender name="FileC" type="log4net.Appender.RollingFileAppender">
<file value="FileC.txt" />
...snip...
</appender>
<root>
<level value="ALL" />
<appender-ref ref="LoggerFileA" />
</root>
<logger name="LoggerFileB">
<level value="ALL" />
<appender-ref ref="FileB" />
</logger>
<logger name="LoggerFileC">
<level value="ALL" />
<appender-ref ref="FileC" />
</logger>
</log4net>
</configuration>