Expressões Log4j 2 e Lambda

Expressões Log4j 2 e Lambda

1. Visão geral

A bibliotecaLog4j 2 adicionou suporte para expressões lambda do Java 8 desde a versão 2.4. These expressions can be used by the Logger interface to enable lazy logging.

Vamos ver um exemplo rápido de como podemos usar esse recurso.

Para obter mais informações sobreLog4j 2, verifique também nossointroductory article.

2. Registro lento com expressões lambda

Uma possível melhoria de desempenho para aplicativos que usam o log pode resultar de evitar o cálculo de mensagens de log se o nível de log correspondente não estiver ativado.

Primeiro, vamos ver uma declaração de log simples no nível TRACE:

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

Neste exemplo, o métodogetRandomNumber() é chamado para substituir o parâmetro de mensagem de log, independentemente de as instruções TRACE serem exibidas ou não. Por exemplo, se o nível de registro for definido como DEBUG,log4j 2 não registrará a mensagem, mas o métodogetRandomNumber() ainda será executado.

Em outras palavras, a execução deste método pode ser desnecessária.

Antes da adição do suporte para expressões lambda, evitamos construir mensagens que não são registradas, verificando explicitamente o nível do log antes de executar a instrução log.

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

Nesse caso, o métodogetRandomNumber() só é chamado se o nível de registro TRACE estiver habilitado. This can improve performance depending on how expensive the execution of methods used to substitute parameters is.

Usando expressões lambda, podemos simplificar ainda mais o código acima:

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

The lambda expression is only evaluated if the corresponding log level is enabled. Isso é conhecido como log lento.

Também podemos usar várias expressões lambda para uma mensagem de log:

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

3. Conclusão

Neste tutorial rápido, vimos como podemos usar expressões lambda com registradoresLog4j 2.

Como sempre, o código-fonte completo do exemplo pode ser encontradoover on GitHub.