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 :

Log4j: Redirection des FATAL uniquement


Sujet :

Logging Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Août 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 16
    Par défaut Log4j: Redirection des FATAL uniquement
    Bonjour,

    Je souhaite, en plus de la configuration classique, que tous mes messages "FATAL" prennent une voie supplémentaire. En l'occurrence un mail à l'administrateur.

    MAIS, je souhaite aussi que seuls les FATAL prennent ce chemin, alors que le reste sera enregistré en fichier.

    Note: je pense que ce que je souhaite n'est pas possible, et qu'il me faudra plusieurs logger dans mon code. Cependant, si quelqu'un a une idée...

    J'ai essayé la configuration suivante:
    ( exemple en console, ce ne sont que des tests )
    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
    26
    27
    28
    29
    <?xml version="1.0" encoding="utf-8"?>
    <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
      <!-- Output the log message to system console.
        -->
      <appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender">
        <param name="Target" value="System.out"/>
        <layout class="org.apache.log4j.PatternLayout">
          <param name="ConversionPattern" value="Dans un fichier : %-5p %c{1} - %m%n"/>
        </layout>
      </appender>
     
      <appender name="FatalConsoleAppender" class="org.apache.log4j.ConsoleAppender">
        <param name="Target" value="System.out"/>
        <layout class="org.apache.log4j.PatternLayout">
          <param name="ConversionPattern" value="Par mail : %-5p %c{1} - %m%n"/>
        </layout>
      </appender>
     
      <root>
        <priority value="fatal" />
        <appender-ref ref="FatalConsoleAppender"/>
      </root>
     
      <category name="com.entreprise.logiciel" >
        <priority value ="trace" />
        <appender-ref ref="ConsoleAppender"/>
      </category>
     
    </log4j:configuration>
    J'obtiens, et c'est normal, mais ce n'est pas ce que je souhaite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dans un fichier : TRACE essai_log4cxx - entree dans la fonction main
    Par mail : TRACE essai_log4cxx - entree dans la fonction main
    Dans un fichier : INFO  essai_log4cxx - dans la fonction
    Par mail : INFO  essai_log4cxx - dans la fonction
    Dans un fichier : FATAL essai_log4cxx - une erreur violente
    Par mail : FATAL essai_log4cxx - une erreur violente
    Alors que je voudrais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dans un fichier : TRACE essai_log4cxx - entree dans la fonction main
    Dans un fichier : INFO  essai_log4cxx - dans la fonction
    Dans un fichier : FATAL essai_log4cxx - une erreur violente
    Par mail : FATAL essai_log4cxx - une erreur violente

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Si tu trouves pas une solution par la suite tu pourras adopter celle ci, tu créeras avec quartz une classe qui n'aura pour rôle à intervalle de temps x que d'aller scruter un repertoire dans lequel t'es censé déposer les fichiers d'erreurs fatales, et si elle trouve un fichier , elle envoit le mail en attachant le fichier et vide le fichier ensuite (car ne peut pas le supprimer puisque log4J met un verrou sur tous les fichiers de sorties de logs). Solution un peu coûteuse en ressource puisque necessite la mise d'un thread, mais ca te debloquera pour ton besoin. Sinon je suis preneur si log4J le fait nativement.

  3. #3
    Membre averti
    Inscrit en
    Août 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 16
    Par défaut
    Bonjour DevServlet,

    Sauf que si j'arrive à n'envoyer que les FATAL vers un fichier unique, j'ai déjà résolu mon problème. En fait, pour adapter ta solution, il faudrait que je lise les fichiers de log pour n'en sortir que les FATAL et les envoyer.

    C'est trop lourd pour mon besoin (applis déposées potentiellement sur de multiples postes)

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    C'est apparemment faisable , voila un bout de code qui pourra t'aider :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <!-- Premier Appender, ne journalise que les messages DEBUG -->
     <appender name="filedebug" class="org.apache.log4j.FileAppender">
         <param name="file" value="debug.log"/>
         <layout class="org.apache.log4j.SimpleLayout"/>
         <filter class="org.apache.log4j.varia.LevelMatchFilter">
             <param name="levelToMatch" value="DEBUG"/>
         </filter>
         <filter class="org.apache.log4j.varia.DenyAllFilter"/>
     </appender>
    J'ai chopé sur ce lien
    Ca te donnera juste un fichier, après pour l'envoyer automatiquement par mail je ne pense que log4J le fasse nativement comme je disais.

  5. #5
    Membre averti
    Inscrit en
    Août 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 16
    Par défaut
    CA FONCTIONNE !

    J'ai donc inséré les balises <filter> à l'intérieur de mon appender, et le résultat est exactement celui attendu (voir ci-dessous).

    Tous mes remerciements.

    Pour continuer sur ta phrase, je sais que log4j permet d'envoyer des mails, et ce en natif. Je vais tâcher de te retrouver ça.

    Nouvelle configuration :
    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
    26
    27
    28
    29
    30
    31
    <?xml version="1.0" encoding="utf-8"?>
    <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
      <appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender">
        <param name="Target" value="System.out"/>
        <layout class="org.apache.log4j.PatternLayout">
          <param name="ConversionPattern" value="Dans un fichier : %-5p %c{1} - %m%n"/>
        </layout>
      </appender>
    
      <appender name="FatalConsoleAppender" class="org.apache.log4j.ConsoleAppender">
        <param name="Target" value="System.out"/>
        <layout class="org.apache.log4j.PatternLayout">
          <param name="ConversionPattern" value="Par mail : %-5p %c{1} - %m%n"/>
        </layout>
        <filter class="org.apache.log4j.varia.LevelMatchFilter">
          <param name="levelToMatch" value="FATAL"/>
        </filter>
        <filter class="org.apache.log4j.varia.DenyAllFilter"/>
      </appender>
    
      <root>
        <priority value="fatal" />
        <appender-ref ref="FatalConsoleAppender"/>
      </root>
    
      <category name="com.seb" >
        <priority value ="trace" />
        <appender-ref ref="ConsoleAppender"/>
      </category>
    
    </log4j:configuration>
    Résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dans un fichier : TRACE essai_log4cxx - entree dans la fonction main
    Dans un fichier : INFO  essai_log4cxx - dans la fonction
    Dans un fichier : FATAL essai_log4cxx - une erreur violente
    Par mail : FATAL essai_log4cxx - une erreur violente

  6. #6
    Membre averti
    Inscrit en
    Août 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 16
    Par défaut
    Je l'ai retrouvé. Il s'agit d'un Appender nommé SMTPAppender.

    Voici un sujet avec exemple de configuration xml ici :
    http://www.developpez.net/forums/d42...voi-seul-mail/

    Et un autre sujet avec configuration properties ici:
    http://stackoverflow.com/questions/7...ender-in-log4j

    J'espère que ça te sera utile.
    Merci encore !

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

Discussions similaires

  1. [log4J] affichage des log4J dans la console (texte bleu)
    Par lalie.perso dans le forum Logging
    Réponses: 1
    Dernier message: 13/04/2006, 13h52
  2. [Jboss][Log4j] Rajouter des regles automatiquement
    Par Hikage dans le forum Wildfly/JBoss
    Réponses: 1
    Dernier message: 12/04/2006, 19h04
  3. [vb.net][datatable] retrouver extraire des valeur unique
    Par arnolem dans le forum Windows Forms
    Réponses: 4
    Dernier message: 13/01/2006, 10h33
  4. [wxPython] redirection des commentaires stderr/stdout
    Par Guigui_ dans le forum wxPython
    Réponses: 5
    Dernier message: 28/12/2005, 22h58
  5. avoir des clef uniques
    Par car dans le forum ASP
    Réponses: 23
    Dernier message: 04/08/2005, 16h01

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