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

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

1. обзор

БиблиотекаLog4j 2 добавила поддержку лямбда-выражений Java 8, начиная с версии 2.4. These expressions can be used by the Logger interface to enable lazy logging.

Давайте посмотрим на быстрый пример того, как мы можем использовать эту функцию.

Для получения дополнительной информации оLog4j 2 также ознакомьтесь с нашимintroductory article.

2. Ленивое ведение журнала с лямбда-выражениями

Потенциальное улучшение производительности для приложений, использующих ведение журнала, может быть результатом отказа от вычисления сообщений журнала, если соответствующий уровень журнала не включен.

Во-первых, давайте посмотрим на простой оператор журнала на уровне TRACE:

logger.trace("Number is {}", getRandomNumber());

В этом примере методgetRandomNumber() вызывается для замены параметра сообщения журнала независимо от того, отображаются ли операторы TRACE или нет. Например, если для уровня журнала задано значение DEBUG,log4j 2 не будет регистрировать сообщение, но методgetRandomNumber() по-прежнему выполняется.

Другими словами, выполнение этого метода может быть ненужным.

До добавления поддержки лямбда-выражений мы могли бы избежать создания сообщений, которые не регистрируются, путем явной проверки уровня журнала перед выполнением оператора log:

if (logger.isTraceEnabled()) {
    logger.trace("Number is {}", getRandomNumer());
}

В этом случае методgetRandomNumber() вызывается только в том случае, если включен уровень журнала TRACE. This can improve performance depending on how expensive the execution of methods used to substitute parameters is.

Используя лямбда-выражения, мы можем еще больше упростить приведенный выше код:

logger.trace("Number is {}", () -> getRandomNumber());

The lambda expression is only evaluated if the corresponding log level is enabled. Это называется отложенным ведением журнала.

Мы также можем использовать несколько лямбда-выражений для сообщения журнала:

logger.trace("Name is {} and age is {}", () -> getName(), () -> getRandomNumber());

3. Заключение

В этом кратком руководстве мы увидели, как мы можем использовать лямбда-выражения с логгерамиLog4j 2.

Как всегда, полный исходный код примера можно найти вover on GitHub.

Related