web-dev-qa-db-ja.com

Log4j Logger / Appenderから単一のクラスを除外する方法は?

パッケージ「com.example」があります。このパッケージには5つのクラスがあります。これらのクラスのうち4つをファイルに記録しますが、5番目のクラスは除外します。

4つのロガーを書くことができます。 logger name = "com.example.Class1"、および4つのロガーすべてに同じアペンダーを追加します。簡単な方法はありませんか(5つのクラスではなく100のクラスがあると考えてみましょう)?

このような他の質問がいくつかあります。しかし、他の人はこのクラスを記録するためにクラスを除外したかっただけです。これは、加法性フラグを使用して解決できます。しかし、5番目のクラスをログに記録したくないので、加算フラグはここでは機能しないと思います。

誰かが私を助けてくれることを願っていますか?

27
Kai Wähner

ログレベルOFFを使用するように5番目のクラスを構成するだけです。

log4j.logger.com.example=INFO, MyAppender
log4j.logger.com.example.FifthClass=OFF

実際、OFFに設定するのではなく、FATALに設定することをお勧めします。代わりにERRORまたはWARNです。

あるクラスからのログを無視したい主な理由は、通常、ログに多くのログが記録される場合です(有用であり、ログを読みにくくする場合)。しかし、ほとんどの場合、何かがうまくいくかどうかをまだ知りたいと思うでしょう本当に間違っています。 ERRORに設定すると、実際の問題のあるケースを見ることができますが、大量のINFOログステートメントに悩まされることはありません。

30
Joachim Sauer

(完全な答えのためだけに)

Log4j.xmlファイルも設定することで、それを試みることができます。必要に応じてパッケージ全体を記録し、FifthClassを異なる方法で記録します。

<logger name="com.example">
    <level value="INFO"/>
</logger>

<logger name="com.example.FifthClass">
    <level value="FATAL"/>
</logger>
13
Sasa