Question Comment Log4j implémente-t-il l'évaluation des arguments paresseux?


Compte tenu du Mécanisme d'évaluation des arguments Javacomment fait Log4j mettre en place évaluation paresseuse lors du formatage du message avec des accolades "pour éviter le coût de la construction des paramètres" lorsque le journal est désactivé?

par exemple.

logger.debug("Entry number: {} is {}", i, entry[i]);

10
2017-08-24 13:47


origine


Réponses:


Je suppose que ce que signifie Log4j, c'est qu'avec les accolades, ils évitent de construire une chaîne lorsque ce n'est pas nécessaire (par exemple, le niveau n'est pas un programme de débogage):

Avec

logger.debug("Entry number: " + i + " is " + String.valueOf(entry[i]));

La chaîne est toujours calculée même si elle n'est pas enregistrée.

avec

logger.debug("Entry number: {} is {}", i, entry[i]);

Log4j peut d'abord vérifier le niveau de journalisation, puis décider s'il vaut la peine de construire la chaîne de messages.

Log4j utilise une classe interne (org.slf4j.helpers.MessageFormatter) qui remplace chaque {} avec les arguments fournis. Vous pouvez regarder le code source dans org.slf4j.impl.Log4jLoggerAdapter.debug(String, Object[])


14
2017-08-24 14:02