Existe-t-il un moyen de configurer log4j de sorte qu'il génère différents niveaux de journalisation vers différents appenders?
J'essaie de configurer plusieurs fichiers journaux. Le fichier journal principal contiendrait tous les messages INFO et supérieurs pour toutes les classes. (En développement, tous les messages DEBUG et au-dessus seront capturés, ainsi que TRACE pour des classes spécifiques.)
Ensuite, j'aimerais 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 de toute autre classe.
Y at-il un moyen d'obtenir ce que je suis après?
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">
<log4j:configuration xmlns:log4j="http://jakarta.Apache.org/log4j/">
<!-- general application log -->
<appender name="MainLogFile" class="org.Apache.log4j.FileAppender">
<param name="File" value="server.log" />
<param name="Threshold" value="INFO" />
<layout class="org.Apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %t [%-40.40c] %x - %m%n"/>
</layout>
</appender>
<!-- additional fooSystem logging -->
<appender name="FooLogFile" class="org.Apache.log4j.FileAppender">
<param name="File" value="foo.log" />
<layout class="org.Apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %t [%-40.40c] %x - %m%n"/>
</layout>
</appender>
<!-- foo logging -->
<logger name="com.example.foo">
<level value="DEBUG"/>
<appender-ref ref="FooLogFile"/>
</logger>
<!-- default logging -->
<root>
<level value="INFO"/>
<appender-ref ref="MainLogFile"/>
</root>
</log4j:configuration>
Ainsi, tous les messages d’information sont écrits dans server.log; par contre, foo.log contient uniquement des messages com.example.foo, y compris des messages de niveau débogage.
J'avais cette question, mais avec une torsion - j'essayais de connecter un contenu différent à différents fichiers. J'avais des informations pour un journal de débogage LowLevel et un journal d'utilisateur HighLevel. Je voulais que LowLevel ne contienne qu'un seul fichier et que HighLevel contienne à la fois un fichier et un syslogd.
Ma solution consistait à configurer les 3 annexes, puis à configurer la journalisation comme suit:
log4j.threshold=ALL
log4j.rootLogger=,LowLogger
log4j.logger.HighLevel=ALL,Syslog,HighLogger
log4j.additivity.HighLevel=false
La partie qui était difficile pour moi à comprendre était que le "log4j.logger" pouvait avoir plusieurs appenders énumérés. J'essayais de le faire ligne par ligne.
J'espère que cela aide quelqu'un à un moment donné!
Pour le fichier journal/appender principal, configurez un .Threshold = INFO
afin de limiter les informations réellement consignées dans l'appender, à INFO et aux versions ultérieures, que les enregistreurs aient ou non activé DEBUG, TRACE, etc.
Pour attraper DEBUG et rien d’autre, vous devrez probablement écrire un appender personnalisé.
Cependant, je vous recommande de ne pas le faire car cela rendrait le dépannage et l'analyse assez difficiles:
Lien de démonstration: https://github.com/RazvanSebastian/spring_multiple_log_files_demo.git
Ma solution est basée sur la configuration XML à l'aide de spring-boot-starter-log4j
. Cet exemple est un exemple de base utilisant spring-boot-starter
et les deux enregistreurs écrivent dans des fichiers journaux différents.