Log4j 2とラムダ式
1概要
Log4j 2
ライブラリは、バージョン2.4以降、Java 8のラムダ式のサポートを追加しました。 ** これらの式は、遅延ロギングを有効にするために
Logger
インタフェースで使用できます。
この機能を利用する方法の簡単な例を見てみましょう。
Log4j 2
の詳細については、こちらのリンクもチェックしてください。
2ラムダ式による遅延ロギング
対応するログレベルが有効になっていないと、ログを使用するアプリケーションのパフォーマンスが向上する可能性があります。
まず、TRACEレベルの簡単なログステートメントを見てみましょう。
logger.trace("Number is {}", getRandomNumber());
この例では、TRACEステートメントが表示されるかどうかにかかわらず、
getRandomNumber()
メソッドが呼び出されてログメッセージパラメータが置き換えられます。たとえば、ログレベルがDEBUGに設定されている場合、
log4j 2
はメッセージを記録しませんが、
getRandomNumber()
メソッドは実行されます。
言い換えれば、このメソッドの実行は不要かもしれません。
ラムダ式のサポートが追加される前は、ログステートメントを実行する前にログレベルを明示的にチェックすることで、ログに記録されないメッセージの作成を避けることができました。
if (logger.isTraceEnabled()) {
logger.trace("Number is {}", getRandomNumer());
}
この場合、
getRandomNumber()
メソッドは、TRACEログレベルが有効になっている場合にのみ呼び出されます。これは、パラメータを代入するために使用されるメソッドの実行がどれほど高価であるかによって、パフォーマンスを向上させることができます。
ラムダ式を使用することで、上記のコードをさらに単純化することができます。
logger.trace("Number is {}", () -> getRandomNumber());
-
ラムダ式は、対応するログレベルが有効になっている場合にのみ評価されます。
ログメッセージに複数のラムダ式を使用することもできます。
logger.trace("Name is {} and age is {}", () -> getName(), () -> getRandomNumber());
3結論
このクイックチュートリアルでは、
Log4j 2
ロガーでラムダ式を使用する方法を説明しました。
いつものように、この例の完全なソースコードはhttps://github.com/eugenp/tutorials/tree/master/logging-modules/log4j2[GitHub上で動く]にあります。