Expressions Log4j 2 et Lambda

Expressions Log4j 2 et Lambda

1. Vue d'ensemble

La bibliothèqueLog4j 2 a ajouté la prise en charge des expressions lambda Java 8 depuis la version 2.4. These expressions can be used by the Logger interface to enable lazy logging.

Voyons un exemple rapide de la façon dont nous pouvons utiliser cette fonctionnalité.

Pour plus d'informations surLog4j 2, consultez également nosintroductory article.

2. Journalisation différée avec les expressions Lambda

Une amélioration potentielle des performances des applications qui utilisent la journalisation peut résulter du fait d'éviter le calcul des messages de journal si le niveau de journalisation correspondant n'est pas activé.

Tout d'abord, voyons une simple instruction de journal au niveau TRACE:

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

Dans cet exemple, la méthodegetRandomNumber() est appelée pour remplacer le paramètre de message de journal, que les instructions TRACE soient affichées ou non. Par exemple, si le niveau de journalisation est défini sur DEBUG,log4j 2 n'enregistrera pas le message, mais la méthodegetRandomNumber() s'exécute toujours.

En d'autres termes, l'exécution de cette méthode peut être inutile.

Avant l'ajout de la prise en charge des expressions lambda, nous pourrions éviter de construire des messages non journalisés en vérifiant explicitement le niveau de journalisation avant d'exécuter l'instruction de journalisation:

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

Dans ce cas, la méthodegetRandomNumber() n'est appelée que si le niveau de journalisation TRACE est activé. This can improve performance depending on how expensive the execution of methods used to substitute parameters is.

En utilisant des expressions lambda, nous pouvons simplifier davantage le code ci-dessus:

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

The lambda expression is only evaluated if the corresponding log level is enabled. Ceci est appelé journalisation différée.

Nous pouvons également utiliser plusieurs expressions lambda pour un message de journal:

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

3. Conclusion

Dans ce rapide tutoriel, nous avons vu comment nous pouvons utiliser des expressions lambda avec les enregistreursLog4j 2.

Comme toujours, le code source complet de l'exemple peut être trouvéover on GitHub.