Création de plusieurs fichiers journaux de contenu différent avec log4j

Existe-t-il un moyen de configurer log4j de manière à ce qu’il affiche différents niveaux de journalisation dans différents appenders?

J’essaie de configurer plusieurs fichiers journaux. Le fichier journal principal intercepterait tous les messages INFO et ci-dessus pour toutes les classes. (En cours de développement, tous les messages DEBUG et au-dessus, ainsi que TRACE pour des classes spécifiques, seraient capturés.)

Ensuite, je voudrais avoir un fichier journal séparé. Ce fichier journal intercepte tous les messages DEBUG pour un sous-ensemble spécifique de classes et ignore tous les messages pour toute autre classe.

Y a-t-il un moyen d’obtenir ce que je cherche?

Merci Dan

Cela devrait vous aider à démarrer:

log4j.rootLogger=QuietAppender, LoudAppender, TRACE # setup A1 log4j.appender.QuietAppender=org.apache.log4j.RollingFileAppender log4j.appender.QuietAppender.Threshold=INFO log4j.appender.QuietAppender.File=quiet.log ... # setup A2 log4j.appender.LoudAppender=org.apache.log4j.RollingFileAppender log4j.appender.LoudAppender.Threshold=DEBUG log4j.appender.LoudAppender.File=loud.log ... log4j.logger.com.yourpackage.yourclazz=TRACE 

Peut-être quelque chose comme ça?

 < !DOCTYPE log4j:configuration SYSTEM "log4j.dtd">                            

Ainsi, tous les messages d’information sont écrits sur server.log; en revanche, foo.log ne contient que des messages com.example.foo, y compris des messages au niveau du débogage.

J’ai eu cette question, mais avec une torsion – j’essayais de connecter différents contenus à différents fichiers. J’avais des informations pour un journal de débogage LowLevel et un journal utilisateur HighLevel. Je voulais que le LowLevel passe à un seul fichier et le HighLevel à la fois à un fichier et à un syslogd.

Ma solution consistait à configurer les trois appenders, puis à configurer la journalisation comme ceci:

 log4j.threshold=ALL log4j.rootLogger=,LowLogger log4j.logger.HighLevel=ALL,Syslog,HighLogger log4j.additivity.HighLevel=false 

La partie qui était difficile à comprendre pour moi était que le “log4j.logger” pouvait avoir plusieurs annonceurs listés. J’essayais de le faire une ligne à la fois.

J’espère que cela aide quelqu’un à un moment donné!

Pour le fichier de .Threshold = INFO principal / appender, configurez un .Threshold = INFO pour limiter ce qui est actuellement enregistré dans l’appender à INFO et au-dessus, que les enregistreurs aient ou non DEBUG, TRACE, etc.

En ce qui concerne la capture de DEBUG et rien de plus que cela … vous devrez probablement écrire un auteur personnalisé.

Cependant, je vous recommande de ne pas le faire, car cela semble rendre le dépannage et l’parsing assez difficiles:

  1. Si votre objective est d’avoir un seul fichier dans lequel vous pouvez chercher quelque chose, il sera ennuyeux de répartir vos données de journal sur différents fichiers – à moins que vous n’ayez une politique de journalisation très réglementée, vous aurez probablement besoin de contenu provenant de DEBUG et d’INFO. être capable de suivre efficacement l’exécution du code problématique.
  2. En enregistrant toujours tous vos messages de débogage, vous perdez tout gain de performance que vous obtenez habituellement dans un système de production en désactivant la consignation (chemin).