アンドレアスの答えに基づいて、次の場合にのみフォーマットを実行するという問題に対するいくつかのアプローチを考えることができLogger.isDebugEnabled
ますtrue
。
オプション1:「フォーマットを行う」フラグを渡す
1つのオプションは、実際にフォーマットを実行するかどうかを指示するメソッド引数を持つことです。ユースケースは次のとおりです。
System.out.println(lazyFormat(true, "Hello, %s.", "Bob"));
System.out.println(lazyFormat(false, "Hello, %s.", "Dave"));
出力は次のようになります。
Hello, Bob.
null
のコードlazyFormat
は次のとおりです。
private String lazyFormat(boolean format, final String s, final Object... o) {
if (format) {
return String.format(s, o);
}
else {
return null;
}
}
この場合、フラグがに設定されている場合String.format
にのみ実行され、format
フラグが設定されtrue
ている場合は。false
を返しますnull
。これにより、ログメッセージのフォーマットが停止し、「ダミー」情報が送信されます。
したがって、ロガーのユースケースは次のようになります。
logger.debug(lazyFormat(logger.isDebugEnabled(), "Message: %s", someValue));
この方法は、質問で求められているフォーマットに正確には適合しません。
オプション2:ロガーを確認する
別のアプローチは、ロガーに直接尋ねることisDebugEnabled
です。
private static String lazyFormat(final String s, final Object... o) {
if (logger.isDebugEnabled()) {
return String.format(s, o);
}
else {
return null;
}
}
このアプローチではlogger
、メソッドに表示されることが期待されlazyFormat
ます。また、このアプローチの利点は、呼び出しisDebugEnabled
時に呼び出し元がメソッドをチェックする必要がないlazyFormat
ことです。そのため、通常の使用法は次のとおりです。
logger.debug(lazyFormat("Debug message is %s", someMessage));