Logback не меняет правила Java: когда вы вызываете метод, аргументы метода должны быть оценены для передачи в метод. Все, что вы сохраняете, используя фигурные скобки, когда уровень журнала не включен, это стоимость конкатенации String , то есть стоимость создания полной String, которую нужно зарегистрировать из отдельного человека. компоненты.
Если стоимость оценки аргументов заметно снижает вашу производительность до такой степени, что она больше не отвечает потребностям ваших клиентов, то вы, вероятно, захотите избежать затрат на ее запуск, если уровень журнала не включен. Из Руководства по возврату, Глава 2: Архитектура, « Параметрированное ведение журнала »:
Один из возможных способов избежать затрат на создание параметров - это окружить оператор log тестом. Вот пример.
if(logger.isDebugEnabled()) {
logger.debug("Entry number: " + i + " is " + String.valueOf(entry[i]));
}
Таким образом, вы не будете нести расходы на создание параметров, если отладка отключена для logger
. С другой стороны, если регистратор включен для уровня DEBUG, вы понесете затраты на оценку того, включен регистратор или нет, дважды: один раз в debugEnabled
и один раз в debug
. На практике эти издержки незначительны, потому что оценка логгера занимает менее 1% времени, необходимого для регистрации запроса.
Использование синтаксиса фигурных скобок (представленного вскоре после этого в руководстве) часто является хорошим компромиссом, и я действительно предпочитаю его только потому, что он помогает различать регистрируемый оператор и данные, которые в него входят. Но это совсем не то же самое, что пропуск полностью, если ваш уровень ведения журнала не включен, поскольку параметры все еще оцениваются и передаются в систему ведения журнала, прежде чем он сможет выяснить, нужно ли их регистрировать или нет.