61 votes

Erreur de journalisation sur stderr et debug, information sur stdout avec log4j

Je tiens à ajouter de la journalisation pour une application que je suis en train d'élaborer, à l'aide d'apache log4j. À ce point, je veux rediriger tous les messages de log pour le niveau INFO et inférieure (TRACE de DÉBOGAGE) sur la sortie standard stdout et tous les autres messages du journal d'AVERTIR et au-dessus (ERREUR FATALE) vers stderr. Par exemple:

...
logger.info("Processing at some point"); // must be written to stdout
logger.debug("Point x was processed"); // must be written to stdout
logger.warn("Incorrect point config"); // must be written only to stderr
logger.error("Exception occurred at point x"); // must be written only to stderr

Donc ce qui doit être mon log4j.fichier de propriétés? Voici à quoi il ressemble en ce momment:

log4j.rootLogger=DEBUG, stdout, stderr

# configure stdout
# set the conversion pattern of stdout
# Print the date in ISO 8601 format
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Threshold = DEBUG
log4j.appender.stdout.Target   = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %-5p %d [%t][%F:%L] : %m%n

# configure stderr
# set the conversion pattern of stdout
# Print the date in ISO 8601 format
log4j.appender.stderr = org.apache.log4j.ConsoleAppender
log4j.appender.stderr.Threshold = WARN
log4j.appender.stderr.Target   = System.err
log4j.appender.stderr.layout = org.apache.log4j.PatternLayout
log4j.appender.stderr.layout.ConversionPattern = %-5p %d [%t][%F:%L] : %m%n

Le problème avec la configuration ci-dessus est que l'instrument.erreur() ... est imprimé sur stdout trop.

53voto

Jonas Berlin Points 719

Résolu ci-dessous également dans le format de fichier de propriétés. L'astuce consistait à définir correctement le filtre. Log4j propriétés info ici

La tentative d'origine, modifiée pour filtrer WARN & ERROR:

 log4j.rootLogger=DEBUG, stdout, stderr

# configure stdout
# set the conversion pattern of stdout
# Print the date in ISO 8601 format
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Threshold = TRACE
log4j.appender.stdout.Target   = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %-5p %d [%t][%F:%L] : %m%n
log4j.appender.stdout.filter.filter1=org.apache.log4j.varia.LevelRangeFilter
log4j.appender.stdout.filter.filter1.levelMin=TRACE
log4j.appender.stdout.filter.filter1.levelMax=INFO

# configure stderr
# set the conversion pattern of stdout
# Print the date in ISO 8601 format
log4j.appender.stderr = org.apache.log4j.ConsoleAppender
log4j.appender.stderr.Threshold = WARN
log4j.appender.stderr.Target   = System.err
log4j.appender.stderr.layout = org.apache.log4j.PatternLayout
log4j.appender.stderr.layout.ConversionPattern = %-5p %d [%t][%F:%L] : %m%n
 

12voto

John B Points 17042

Post précédent de Jon Skeet à Post

Malheureusement, il n'y a pas de seuil maximum , donc chaque fois que vous recevez des messages de débogage, vous recevez également des messages d'avertissement. C'est un peu pénible, IMO.

9voto

Raedwald Points 8862
  1. au lieu d'utiliser .propriétés de configuration, vous devez utiliser un .de configuration xml.
  2. Dans .xml de config de mettre un élément nommé "filtre" de type "org.apache.log4j.varia.LevelRangeFilter" et définir ses paramètres LevelMax et LevelMin.

Les suivantes, par exemple .xml de configuration de définir deux appenders: stdout, stderr. Le stdout imprime tous les journaux qui ont un niveau inférieur ou égal à l'INFO sur la sortie standard stdout, et stderr imprime tous les journaux avec un niveau supérieur d'INFOS sur la sortie stderr.

<?xml version="1.0" encoding="UTF-8"?>
<!--
    Document    : log4j.xml
    Created on  : 13 Δεκέμβριος 2011, 3:55 μμ
    Author      : elitex
    Description : Purpose of the document follows.
-->
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" >
<log4j:configuration>
    <appender name="stderr" class="org.apache.log4j.ConsoleAppender">
        <param name="threshold" value="warn" />
        <param name="target" value="System.err"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p %d [%t][%F:%L] : %m%n" />
        </layout>
    </appender>
    <appender name="stdout" class="org.apache.log4j.ConsoleAppender">
        <param name="threshold" value="debug" />
        <param name="target" value="System.out"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p %d [%t][%F:%L] : %m%n" />
        </layout>
        <filter class="org.apache.log4j.varia.LevelRangeFilter">
            <param name="LevelMin" value="debug" />
            <param name="LevelMax" value="info" />
        </filter>
    </appender>
    <root>
        <priority value="debug"></priority>
        <appender-ref ref="stderr" />
        <appender-ref ref="stdout" />
    </root>
</log4j:configuration>

Pour plus d'info, regardez: http://www.laliluna.de/articles/posts/log4j-tutorial.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X