1

log4net を利用するサードパーティのアセンブリを使用しています。問題のアセンブリは、「情報」ログ レベルに頻繁に記録されます。これにより、アプリケーションに望ましくない多くのノイズが発生します。

特定のアセンブリに対して異なるログ レベルを構成する方法はありますか?

4

2 に答える 2

6

はい、そうです。構成ファイル内のロガー名に基づいて値を設定する方法があります。簡単にするためにファイルの残りの部分は省略していますが、ファイルには次のようなルート セクションが必要です。

ここで、他のロガー用に余分なセクションを追加するだけです。

例えば:

<root>        
    <level value="ERROR" />    
    <appender-ref ref="RollingFile" />
</root>    
<logger name="ServiceLib">
    <level value="DEBUG"/>  
</logger>

これは、タイプを渡してロガーを作成している場合に機能します。名前は、クラスの名前空間に基づいています。このような:

private static readonly ILog log = LogManager.GetLogger(typeof(ServiceLib.MyWebService));

うまくいけば、これはあなたのために働く.

于 2013-03-28T22:31:31.483 に答える
2

マニュアルから:

http://logging.apache.org/log4net/release/manual/configuration.html

アセンブリに対しては実行できませんが、そのアセンブリ内のパッケージに対しては実行できます。そのため、そのアセンブリ パッケージがすべて Com.Foo で始まる場合、次の構成は必要な処理を行い、ロギングを WARN レベル以上に制限するため、INFO ロギングは表示されません。

<log4net>
    <!-- A1 is set to be a ConsoleAppender -->
    <appender name="A1" type="log4net.Appender.ConsoleAppender">

        <!-- A1 uses PatternLayout -->
        <layout type="log4net.Layout.PatternLayout">
            <!-- Print the date in ISO 8601 format -->
            <conversionPattern value="%date [%thread] %-5level %logger %ndc - %message%newline" />
        </layout>
    </appender>

    <!-- Set root logger level to DEBUG and its only appender to A1 -->
    <root>
        <level value="DEBUG" />
        <appender-ref ref="A1" />
    </root>

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

使用する Lib がこの規則 (型名に基づくログ) に従っていない場合は、Lib がログに使用する文字列をログ ファイルで確認し、その文字列の "Com.Foo" を変更する必要があります。

于 2013-03-28T22:34:18.043 に答える