2012-03-01 2 views
3

私はorg.jboss.logging.Loggerクラスを使用していますが、違和感を覚えているようです。エラーまたは警告が表示されたら、logger.error("error message")またはlogger.warn("warning message")を使用するだけで、jboss-log4j.xmlファイルの設定に基づいて表示されます。JBossでisTraceEnabled()関数を使用する必要があるのはなぜですか?

しかし、既存のjbossコードのthis discussionおよびthis linkに基づいて、トレースを使用する場合は、有効にするかどうかをlogger.isTraceEnabled()で判断する必要があります。なぜ私はこのことだけをトレースのためにしなければならないのでしょうか?

答えて

6

「する必要はありません」。それはそれなしでうまく動作します。しかし、TRACEレベルのロギングは大量に冗長になる傾向があり、最終的に実際にファイルに記録されていなくても、CPU時間のかなりの部分を占める可能性があります。ロギングステートメントの周りにifチェックを入れることで、オーバーヘッドを回避できます。

私は他の良質のコードベースがDEBUGとINFOレベルのロギングについても同じことをしているので、TRACEに限定されません。

log4j manual relating to peformanceのセクションを参照してください。

+0

これは単なるパフォーマンスのものです。特にリクエストごとに発生する情報レベルのものについては意味があります – JoshC13

+0

あなたが知っているのは、使用しているロガーによって異なります。たとえば、org.slf4j.impl.Log4jLoggerAdapterは内部的にこのチェックを行います。したがって、このチェックはまったく必要ありません。 IMHOこのチェックを内部的に行うのが理にかなっています。特に知っているように、良いロガーが得られるのは、メッセージがisTraceEnabled()を呼び出すより効率が悪い方法で構築されている場合ですhttp://stackoverflow.com/questions/21281048/should-i-be-using-slf4j-istraceenabled-or-not) – ndtreviv

関連する問題