[解決済み】log4jで、ログを取る前にisDebugEnabledをチェックすると、パフォーマンスが向上する?
質問
を使っています。 Log4J をロギング用アプリケーションに追加しました。以前は、次のようなデバッグコールを使っていました。
オプション1:
logger.debug("some debug text");
をチェックした方が良いというリンクもあります。
isDebugEnabled()
というように、最初に
オプション 2:
boolean debugEnabled = logger.isDebugEnabled();
if (debugEnabled) {
logger.debug("some debug text");
}
そこで質問なのですが、" オプション2は、何らかの形でパフォーマンスを向上させるのでしょうか? "です。
なぜなら、どのような場合でもLog4JフレームワークはdebugEnabledに対して同じチェックを持っているからです。オプション2については、もし私たちが単一のメソッドまたはクラスで複数のデバッグステートメントを使用している場合、それは有益かもしれません。
isDebugEnabled()
メソッドを複数回(呼び出しのたびに)呼び出します。
isDebugEnabled()
メソッドは一度だけで、Log4Jがデバッグレベルに設定されている場合、実際には
isDebugEnabled()
メソッドを2回実行します。
- 変数debugEnabledに値を代入する場合、および
- 実際にlogger.debug()メソッドから呼び出される。
複数の
logger.debug()
ステートメントをメソッドやクラス内で呼び出し
debug()
メソッドを使用する場合、オプション2と比較して、Log4Jフレームワークのオーバーヘッドになります。そのため
isDebugEnabled()
は非常に小さなメソッドなので(コードの観点から)、インライン化の良い候補になるかもしれません。
解決方法は?
この場合、オプション1が適しています。
ガード文(チェック
isDebugEnabled()
を呼び出すときに、ログメッセージの計算が高くつくことを防ぐためにあります。
toString()
メソッドを実行し、その結果を連結しています。
この例では、ログメッセージは定数文字列なので、ロガーに捨てさせることは、ロガーが有効かどうかをチェックするのと同じくらい効率的で、分岐が少ないのでコードの複雑さも軽減されます。
より良い方法は、ログステートメントがフォーマットの指定とロガーによって置換される引数のリストを取るが、ロガーが有効である場合にのみ "遅延," を行う、より最新のロギングフレームワークを使用することです。これは、次のようなアプローチです。 スルフ4j .
参照 関連する質問に対する私の回答 をご覧ください。また、log4jでこのようなことを行う例もあります。
関連
-
[解決済み] java.sql.SQLException: ORA-00933: SQL コマンドが正しく終了していません。
-
[解決済み] Jdbctemplate の文字列に対するクエリです。EmptyResultDataAccessException: 不正な結果サイズ:期待値1、実際0
-
[解決済み] Java の substring() の時間複雑性
-
[解決済み] double 型を Int 型に変換、切り捨て
-
[解決済み] 最も近い整数への切り捨て - 私は不正をしているのでしょうか、それともこれは十分すぎるほど適切なのでしょうか?
-
[解決済み] SubclipseとJavaHLのインストールで頭を悩ます
-
[解決済み] java.lang.ClassCastException: java.lang.Long を java.lang.Integer にキャストできない(java 1.6
-
[解決済み】Javaでfinalキーワードを使用するとパフォーマンスが向上しますか?
-
[解決済み] プログラムによるLog4jロガーの設定
-
[解決済み】なぜjava.util.loggingを使用しないのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] トークンのシンタックスエラー、これらのトークンを削除してください [closed].
-
[解決済み] HashMapのtoString関数はなぜ異なる順序で自分自身を印刷するのですか?
-
[解決済み] getContentPane()は具体的に何をするのですか?
-
[解決済み] この配列の中の数字を入れ替えるには、何が足りないのでしょうか?ジャバ
-
[解決済み] Apache Camelのログに簡単なテキストを記録する
-
[解決済み] Java: getInstanceとStaticの比較
-
[解決済み] 文字列の巻き方
-
[解決済み] x--やx++はここで何をするのですか?
-
[解決済み] .lengthが解決できない、またはフィールドでない
-
[解決済み】Javaで文字列のConcatenationよりもString.formatを使用する方が良い習慣ですか?