複数のロガー ノードを使用した私の実験的な経験では、log4net は特定のロガーで設定した最低レベルを使用します。そのため、MyApp.Common で WARN を指定したにもかかわらず、MyApp.Common.SomeGenericClass で INFO を使用すると、グローバル (?) レベルの設定が WARN に低下しました。したがって、アペンダー ConsoleAppender が 2 回起動されたため、MyApp.Common と MyApp.Common.SomeGenericClass からエントリを取得しました。
私が求めていたのは、ログのサブセットを別のファイルに移動することでした。あなたが質問で述べたこととはまったく異なりますが、それはあなたがやりたいことを網羅しています。そして、自分の利益のために、自分の解決策をどこかで再び見つけることができる場所に文書化したいと思いました;-)。
上記のような2つの異なるロガーを作成しましたが、1つはルートですが、同じように機能します。次に、それぞれが異なるエラー レベルでフィルタリングする 2 つの異なるアペンダーを作成し、2 つのロガーで別々に参照しました。私が取得するのは、1 つのファイルにある OtherNamespace からのログと、他のすべてのファイルにあるログです。そのためのコードを以下に示します。
<log4net>
<logger name="OtherNamespace">
<appender-ref ref="OtherNamespaceAppender"/>
</logger>
<root>
<level value="WARN"/>
<appender-ref ref="MyRollingFileAppender"/>
</root>
<appender name="MyRollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="C:\Comanche\mylogfileFor_%property{User}.log" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<threshold value="ERROR" />
<countDirection value="3" />
<maxSizeRollBackups value="2" />
<maximumFileSize value="200KB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%-6level%utcdate{ABSOLUTE} – %location :: %message%newline" />
</layout>
</appender>
<appender name="OtherNamespaceAppender" type="log4net.Appender.RollingFileAppender">
<file value="C:\Comanche\OtherNamespace.log" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<threshold value="WARN" />
<countDirection value="3" />
<maxSizeRollBackups value="2" />
<maximumFileSize value="200KB" />
<staticLogFileName value="true" />
<filter type="log4net.Filter.LoggerMatchFilter">
<acceptOnMatch value="true" />
<LoggerToMatch value="OtherNamespace" />
<!-- set your class name here -->
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%-6level%utcdate{ABSOLUTE} :: %message%newline" />
</layout>
</appender>
「その他すべて」は別の名前空間にあったため、OtherNamespace ロガーにシャントされなかったことに注意してください。これは、何らかの名前の一致があった場合に発生する可能性があります。また、すべてが root から継承されるため、root が参照するアペンダーのログ レベルを WARN に変更した場合は、OtherNamespace ログも取得していたことに注意してください。私が達成したかったのは、より詳細なログを他のすべてのものとは別のファイルに記録することだけでした。