web-dev-qa-db-fra.com

Comment exclure une seule classe d'un enregistreur / appendeur Log4j?

J'ai un package "com.example". Ce package comprend cinq classes. Je souhaite enregistrer quatre de ces classes dans un fichier, mais exclure la cinquième classe.

Je pourrais écrire quatre enregistreurs, par exemple logger name = "com.example.Class1", et ajoutez le même appender aux quatre enregistreurs. N'y a-t-il pas de moyen plus simple (pensons que j'en ai 100 au lieu de 5)?

Il y a d'autres questions comme celle-ci. Mais les autres gars voulaient juste exclure une classe pour enregistrer cette classe. Cela peut être résolu en utilisant l'indicateur d'addivité. Mais je pense que l'indicateur d'additivité ne fonctionne pas ici, car je ne veux pas enregistrer la cinquième classe, mais toutes les autres?!

J'espère que quelqu'un pourra m'aider?

27
Kai Wähner

Configurez simplement votre cinquième classe pour utiliser le niveau de journalisation OFF:

log4j.logger.com.example=INFO, MyAppender
log4j.logger.com.example.FifthClass=OFF

En fait, je vous suggère de ne pas le définir sur OFF, mais sur FATAL. ERROR ou même WARN à la place.

La principale raison de vouloir ignorer la journalisation d'une classe est généralement si elle se connecte trop (plus que ce qui est utile et rend difficile la lecture du journal). Cependant, la plupart du temps, vous voudrez toujours savoir si quelque chose se passe vraiment mal. En le définissant sur ERROR, vous pouvez toujours voir les cas réellement problématiques, mais ne pas être gêné par des tonnes d'instructions de journal INFO.

30
Joachim Sauer

(Juste pour la réponse complète)

Vous pouvez essayer de le faire en définissant également le fichier log4j.xml. Enregistrez simplement le package entier comme vous le souhaitez et connectez la FifthClass différemment.

<logger name="com.example">
    <level value="INFO"/>
</logger>

<logger name="com.example.FifthClass">
    <level value="FATAL"/>
</logger>
13
Sasa