«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.