Некоторые ответы на этот вопрос объясняют:
Короткая версия - это использование форматов быстрее, потому что в
Logger.debug("my name is {}", name);
дорогостоящее разбиение строки происходит только после того, как log4j решит, что событие должно быть зарегистрировано; например после фильтрации по уровню ведения журнала и т. д.
В отличие от версии с конкатенацией строк
Logger.debug("my name is " + name);
разбивка строк происходит при оценке аргументов. Таким образом, это происходит даже в тех случаях, когда ни одно событие не регистрируется. (Вы можете частично избежать этого с помощью защитников в вашем коде, но это делает код регистрации многословным.)
Но взгляните на этот пример:
log.debug("Count: " + list.size());
log.debug("Count: {}", list.size());
Версия формата будет быстрее, но обе версии всегда оценивают выражение list.size()
. Если это дорогостоящая операция, возможно, вам придется прибегнуть к использованию охраны; например,
if (log.isDebugEnabled()) {
log.debug("Count: " + list.size());
}