Перейти к основному содержимому

Log4j 2 и лямбда-выражения

· 2 мин. чтения

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 .