14

アプリケーションの log4net 設定にalogfileAppenderと aを設定しました。consoleAppenderログファイル アペンダーは ERROR メッセージ以上のみを書き込み、コンソール アペンダーは DEBUG 以上を書き込みたいと思います。

私の設定は次のとおりです。

<log4net debug="false">

<appender name="LogFileAppender" type="log4net.Appender.FileAppender,log4net" >
  <param name="File" value="log.txt" />
  <param name="AppendToFile" value="true" />
  <layout type="log4net.Layout.PatternLayout,log4net">
    <param name="ConversionPattern" value="%d %M - %m%n" />
  </layout>
  <threshold value="ERROR"/>
</appender>

<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"   >
  <layout type="log4net.Layout.PatternLayout">
    <param name="ConversionPattern" value="%d %m%n" />
  </layout>
</appender>


<root>
  <priority value="DEBUG" />
  <appender-ref ref="ConsoleAppender" />
  <appender-ref ref="LogFileAppender" />
</root>

</log4net>

ERROR と DEBUG の両方がログファイル アペンダーに出力されていることがわかりました。ERROR のみに制限するにはどうすればよいですか?

4

5 に答える 5

11

levelロガーのタグは、thresholdまたはLevelMatchFilter.

Level実際に生成されるログ ステートメントを示します。これは、コードでテストできるものです。

Threshold一方、しきい値を下回るすべてのログ メッセージを除外します。

これは、最高のロガー レベルよりも高いしきい値を設定しても意味がないことを意味します。INFO のレベルを設定して (ほとんどのアペンダーが使用するため)、DEBUG のしきい値を持つアペンダーを作成する方法を何度も見てきました。そして、実際にアペンダーに DEBUG メッセージが表示されないことに驚いています...

于 2011-12-29T11:30:41.510 に答える
6

アペンダーの非常に具体的なフィルタリングを取得するには、ログファイル アペンダーが実際に出力されるイベントをフィルター処理するようにLevelMatchFilterまたはを構成する必要があります。 例えば:LevelRangeFilter

<filter type="log4net.Filter.LevelRangeFilter">
    <levelMin value="ERROR"/>
    <levelMax value="FATAL"/>
</filter>

また

<filter type="log4net.Filter.LevelMatchFilter">
    <levelToMatch value="ERROR"/>
</filter>

これらのいずれかを<appender>タグ内に配置すると、これが機能するはずです。

<appender name="LogFileAppender" type="log4net.Appender.FileAppender,log4net" >
    <filter type="log4net.Filter.LevelMatchFilter">
        <levelToMatch value="ERROR"/>
    </filter>
    <param name="File" value="log.txt" />
    <param name="AppendToFile" value="true" />
    <layout type="log4net.Layout.PatternLayout,log4net">
        <param name="ConversionPattern" value="%d %M - %m%n" />
    </layout>
    <threshold value="ERROR"/>
</appender>

注: kgiannakakis によって指摘された間違いを削除するために更新されました。

于 2009-07-23T11:58:41.150 に答える
3

あなたが受け取っている答えは部分的に正しいです。はThreshold、追加されたレベルの下限を設定するためにのみ使用されます。ERRORのしきい値は、実際にはERRORおよびFATAL(「上」のERROR)を受け取ります。

LevelMatchFilterレベル値が「ERROR」(および他のアペンダーの場合は「DEBUG」)のを実装する必要があります。DenyAllFilterただし、フィルターチェーンの最後にもを追加する必要があります。
例えば:

<appender name="LogFileAppender" type="log4net.Appender.FileAppender,log4net" >
  <param name="File" value="log.txt" />
  <param name="AppendToFile" value="true" />
  <layout type="log4net.Layout.PatternLayout,log4net">
    <param name="ConversionPattern" value="%d %M - %m%n" />
  </layout>
  <filter type="log4net.Filter.LevelMatchFilter">
    <levelToMatch value="ERROR" />
  </filter>
  <filter type="log4net.Filter.DenyAllFilter" />
</appender>

log4net 1.2.10以降、DenyAllFilterを実装する必要がありました(このトピックに関する質問はここで確認できます)。

于 2011-01-10T22:00:00.783 に答える
0

加法性プロパティを使用する必要があります。例については、こちらを参照してください。2 つのロガーを定義する必要があります。

于 2009-07-23T12:09:16.590 に答える