IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Logging Java Discussion :

Configuration du ConsoleAppender de Log4j


Sujet :

Logging Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 8
    Par défaut Configuration du ConsoleAppender de Log4j
    Bonjour,

    pour mon appli Java j'utilise l'API Log4j afin de réaliser tout le traitement des logs. J'ai choisi de paramétrer log4j à l'aide d'un fichier de configuration simple (non XML), tous les messages sont redirigés vers la console à l'aide d'un appender org.apache.log4j.ConsoleAppender.

    Ma question est la suivante :
    comment faire pour diriger les messages issus d'un logger de niveau inférieur à ERROR vers la sortie standard (stdout) et tous les messages du même logger d'un niveau supérieur ou égal à ERROR vers la sortie d'erreur.

    Merci

  2. #2
    Membre expérimenté
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mars 2002
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mars 2002
    Messages : 192
    Par défaut
    Salut,

    Il me semble qu'il n'est pas possible de faire ce que tu souhaites avec une configuration simple de type fichier de properties. En effet, pour réaliser ce que tu veux, il faut positionner un LevelRangeFilter sur tes appenders, ceci n'est il me semble uniquement possible en XML.

    En XML, voilà à quoi doit ressembler ton fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
    <log4j:configuration>
        <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
            <param name="Target" value="System.out" /><layout class="org.apache.log4j.PatternLayout">
                <param name="ConversionPattern" value="[%d{ISO8601}] %-5p %c %m %n" />
            </layout>
            <filter class="org.apache.log4j.varia.LevelRangeFilter">
                <param name="LevelMax" value="INFO"/>
            </filter>
        </appender>
        <appender name="STDERR"  class="org.apache.log4j.ConsoleAppender">
            <param name="Target" value="System.err" />
            <layout class="org.apache.log4j.PatternLayout">
                <param name="ConversionPattern" value="[%d{ISO8601}] %-5p %c %m %n" />
            </layout>
            <filter class="org.apache.log4j.varia.LevelRangeFilter">
                <param name="LevelMin" value="WARN"/>
            </filter>
        </appender>
        <root>
    		<appender-ref ref="STDOUT" />
        	<appender-ref ref="STDERR"/>
    	</root>
    </log4j:configuration>
    Tu peux charger la configuration décrite ci dessus par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DOMConfigurator.configure(Log4JTester.class.getResource("/log4j.xml"));
    Si tu dois absolument rester en configuration par fichier properties, alors tu peux t'approcher du comportement souhaité en utilisant le Threshold de l'appender. Ceci n'active un appender que si le message a une priorité supèrieure au Threshold. En utilisant le fichier ci-apres, ton appender STDOUT loggera tous les messages, tandis que l'appender STDERR ne loggera que les messages dont le niveau est au moins WARN.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    log4j.rootLogger=ALL, stdout, stderr
     
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.Target=System.out
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=[STDOUT]%c %d{ISO8601} -- %p -- %m%n
    log4j.appender.stdout.Threshold=ALL
     
    log4j.appender.stderr=org.apache.log4j.ConsoleAppender
    log4j.appender.stderr.Target=System.err
    log4j.appender.stderr.layout=org.apache.log4j.PatternLayout
    log4j.appender.stderr.layout.ConversionPattern=[STDERR]%c %d{ISO8601} -- %p -- %m%n
    log4j.appender.stderr.Threshold=WARN
    Voilà à toi de jouer...

    Matthieu BROUILLARD

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 8
    Par défaut
    Salut,

    Tout d'abord merci de cette réponse extrêmement complète.

    Si j'ai bien compris en continuant d'utiliser un fichier properties j'aurai au mieux les messages de niveau inférieur à ERROR qui iront bien sur la sortie standard, et ceux de niveau supérieur ou égal à ERROR qui s'afficheront à la fois sur la sortie standard et la sortie erreur...

    Bon, je crois qu'il ne me reste plus qu'à utiliser un fichier de configuration XML...

    Merci.

  4. #4
    Membre expérimenté
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mars 2002
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mars 2002
    Messages : 192
    Par défaut
    Tout dépend de ce qu'on appelle niveau inférieur. L'utilisation d'un Threshold désactive tous les messages dont le niveau de gravité du message est moindre que celui du Threshold.
    En gros dans la configuration properties que je t'ai donné, tous les messages sont affichés sur STDOUT et seuls ceux dont la gravité est supèrieure ou égale à WARN (WARN & ERROR) sont affichés sur STDERR.

    Si tu veux un contrôle plus fin, il vaut mieux utiliser le fichier XML.

    Matthieu BROUILLARD

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Log4j] Configurer Log4j avec un fichier xml
    Par supermanu dans le forum Logging
    Réponses: 10
    Dernier message: 16/07/2007, 11h03
  2. [LOG4J] configuration de log4j sous tomcat
    Par java_fun dans le forum Logging
    Réponses: 4
    Dernier message: 26/09/2005, 11h30
  3. [Log4j] fichier de configuration ou XML ?
    Par nabilblk dans le forum Logging
    Réponses: 2
    Dernier message: 02/09/2005, 16h42
  4. [Log4j]petit problème de configuration
    Par mikey_ufc dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 09/01/2005, 23h32
  5. [ log4j ] configuration de log4j
    Par felix79 dans le forum Logging
    Réponses: 5
    Dernier message: 18/10/2004, 14h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo