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...
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?
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 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?
Partager