0

log4j を非常に詳細に使用する外部パッケージを使用しています。私はコードを見て、予想されるlog4j行を見つけました:

private Logger log = Logger.getLogger("SomeLoggerName");
...
log.info("Trivial message");
log.info("More trivial data");

コードを変更できないので、変更しようとしましたlog4j.xml

<category name="SomeLoggerName">
  <level value="${log4j_level:-WARN}"/>
  <appender-ref ref="FileLogger"/>
</category>

category nameそのプロパティはロガー名と同等であると推測しました。本当ですか?そうでない場合、ロガー名でフィルタリングするにはどうすればよいですか?

4

3 に答える 3

3

<logger>実際には、要素名として使用できます。

<logger name="SomeLoggerName">
  <level value="${log4j_level:-WARN}"/>
  <appender-ref ref="FileLogger"/>
</logger>

category下位互換性のためにあると思いますが、その使用は非推奨です。

于 2012-07-30T13:28:38.660 に答える
3

冗長性を下げたいだけなら、優先度を上げるだけです。

<category name="SomeLoggerName">
  <level value="WARN"/>
</category>

それ以外の場合は、既存のアペンダーにフィルターを追加することをお勧めします。まず、log4j フィルターを実装します。あなたの場合、ログイベントが不要なクラスからのものかどうかを判断するのは簡単な比較です。次のようなものが機能します。

public class MyAuditFilter extends Filter{

    @Override
    public int decide(LoggingEvent event) {
        if(event.getClass.getCanonicalName().equalsIgnoreCase("class.you.don't.want"))
            return Filter.DENY;
        else
            return Filter.ACCPET;
    }
}

フィルターを実装したら、次のように log4j アペンダーに追加します。

<appender name="myAppender" class="my.appender.class">
  .
  .
  <filter class="my.namespace.MyAuditFilter">
    <param name="AcceptOnMatch" value="True"/>
  </filter>
  .
  .
</appender>

さらに制御が必要な場合は、フィルターを使用してログ記録を非常に細かく制御できます。

于 2012-07-30T13:43:26.140 に答える
1

そうです、ロガー==カテゴリ。構成に問題がありますか? 通常は問題なく動作するはずです。

于 2012-07-30T13:24:03.900 に答える