1. Обзор
В библиотеку Log4j 2
добавлена поддержка лямбда-выражений Java 8, начиная с версии 2.4. Эти выражения могут использоваться интерфейсом Logger
для включения отложенного ведения журнала.
Давайте посмотрим на быстрый пример того, как мы можем использовать эту функцию.
Для получения дополнительной информации о Log4j 2
также ознакомьтесь с нашей вводной статьей .
2. Ленивая регистрация с помощью лямбда-выражений
Потенциальное повышение производительности для приложений, использующих ведение журнала, может быть результатом отказа от расчета сообщений журнала, если соответствующий уровень журнала не включен.
Во-первых, давайте посмотрим на простой оператор журнала на уровне TRACE:
logger.trace("Number is {}", getRandomNumber());
В этом примере метод getRandomNumber()
вызывается для подстановки параметра сообщения журнала независимо от того, отображаются операторы TRACE или нет. Например, если установлен уровень журнала 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
.
Как всегда, полный исходный код примера можно найти на GitHub .