Опираясь на ответ Андреаса , я могу вспомнить пару подходов к вопросу о выполнении форматирования только в том случае, если Logger.isDebugEnabled
возвращает true
:
Вариант 1: передать флаг "do formatting"
Один из вариантов - иметь аргумент метода, который сообщает, нужно ли на самом деле выполнять форматирование. Вариант использования может быть:
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));