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] Attraper les erreurs Java de Log4J (comme "java.io.IOException: No space left on device" par exemple)


Sujet :

Logging Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 30
    Points : 20
    Points
    20
    Par défaut [Log4J] Attraper les erreurs Java de Log4J (comme "java.io.IOException: No space left on device" par exemple)
    Salut,

    Je tâtonne encore dans l'utilisation de log4j 1.2 dans java, et je n'ai pas réussi à trouver les informations qui m’intéressent.

    J'ai un logger avec un appender console, et un appender DailyRollingFileAppender (sur disque différent de l'appli).
    Alors voilà mon problème : je dois couper les logs (fichier + console) de mon appli en cas de disque plein après avoir écrit un dernier message d'avertissement sur mon Systeme.out

    1. Quel est le comportement par défaut de log4j pour mon appender fichier si le disque est plein : est ce que l'appli continue toute seule sans plus logger dans le fichier, ou est ce que l'appli s’arrête ?

    2. Si l'appli continue, comment je fais pour savoir que mon disque est plein puisque je dois couper mon log sur la console?

    3. Je m'étais dit que je pourrais tester le comportement de log4j en mettant mon fichier de log en lecture seule... mais là je me suis aperçu que ma commande PropertyConfigurator.configure(log4jProperties) me balançait tout un tas d'insultes dans mon output, mais qu'il ne lançait pas d'erreur, et continuait tranquillement son exécution...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    log4j:ERROR setFile(null,true) call failed.
    java.io.FileNotFoundException: /usr/local/log/trait-ev/logRetraitement/trait-ev.log (Permission denied)
            at java.io.FileOutputStream.openAppend(Native Method)
            ...
    J'ai voulu essayer de gérer le comportement de log4j après une erreur... Dans mes recherches j'ai vu une propriété ErrorHandler, mais j'ai aussi vu sur un site dans le chapitre log4j.properties vs log4j.xml que "Certaines fonctionnalités ne sont pas supportées par la configuration par properties comme l'utilisation des Filters ou des ErrorHandlers.". Malheureusement je crois bien que l'utilisation des fichiers de conf .properties m'est imposée. Est ce que quelqu'un connait une solution?
    j'ai quand même essayé de mettre dans mon fichier properties la ligne "log4j.appender.monFileAppender.errorHandler=org.apache.log4j.helpers.OnlyOnceErrorHandler", mais ça n'a rien fait
    J'ai alors recopié la classe OnlyOnceErrorHandler (qui hérite de ErrorHandler) dans une classe maison, et j'ai mis des points d'arrêt (merci netbeans) dans les fonctions error(), j'ai modifié ma ligne précédente en "log4j.appender.monFileAppender.errorHandler=com.monappli.utils.OnlyOnceErrorHandler_test" mais je me mange une belle erreur...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    log4j:ERROR Could not instantiate class [com.monappli.utils.OnlyOnceErrorHandler_test].
    java.lang.ClassNotFoundException: com.monappli.utils.OnlyOnceErrorHandler_test
            at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
            at java.security.AccessController.doPrivileged(Native Method)

    4. je vais essayer je me créer un disque plein avec une clé usb, mais du coup j'ai peur de ne pas pouvoir attraper mon erreur.
    Est ce que quelqu'un a des conseils (ou des liens) qui pourraient m'aider svp?

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 30
    Points : 20
    Points
    20
    Par défaut
    problème résolu en créant ma propre classe héritant de ErrorHandler (pour capturer l'erreur d'espace disque, et en profiter pour couper mes logs sur tous mes appenders : fichier+console, sans couper les traitements)
    et bien sûr comme je n'ai pas pu (réussi?) à brancher cette classe dans mon fichier log4j.properties je l'ai fait dans le code sur mon appender fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    appliFileAppender.setErrorHandler(new MonErrorHandler(appliFileAppender.getErrorHandler()));
    (je me suis un peu inspiré de la classe org.apache.log4j.helpers.OnlyOnceErrorHandler)

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

Discussions similaires

  1. Attraper les erreurs mémoire
    Par PascalLando dans le forum Langage
    Réponses: 1
    Dernier message: 11/02/2009, 02h07
  2. [log4j] tracer les TOUTES les erreurs
    Par jaoued dans le forum Logging
    Réponses: 2
    Dernier message: 11/04/2008, 15h59
  3. 'Attraper' les erreurs non traités
    Par snopims dans le forum ASP.NET
    Réponses: 4
    Dernier message: 08/04/2008, 10h54
  4. 'Attraper' les erreurs non traités
    Par CAML dans le forum Windows Forms
    Réponses: 7
    Dernier message: 13/04/2007, 14h19
  5. Réponses: 2
    Dernier message: 23/11/2006, 09h20

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