Bonsoir,
Dans mon application, j'utilise log4j. Tous les logs sont écrits dans un fichier, mais si une erreur de type STDERR n'étant pas gérée par mes logs survient, elle est redirigée dans un autre fichier. Par exemple, une NullPointerException ne va pas passer par mes logs mais être directement redirigée sur la sortie d'erreur, donc mon deuxième fichier.
Je dois ajouter l'heure avant l'exception. J'ai utilisé un PrintStream personnalisé pour ça:
Main.java
MyPrintStream.java
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 public class Main { MyPrintStream ps; public static void main(String[] args) { System.setErr(new MyPrintStream(System.out)); Integer i = null; String str = i.toString(); } }
Output:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 public class MyPrintStream extends PrintStream { public MyPrintStream(OutputStream out) { super(out); } @Override public void println(String string) { Date date = new Date(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); super.println(simpleDateFormat.format(date) + " " + string); } }
Ce dont j'ai besoin:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Exception in thread "main" java.lang.NullPointerException 2018-03-21 18:05:53.749 at test.Main.main(Main.java:9)
Dans ma sortie, la date est affichée pour chaque ligne sauf la première. Si je surcharge la méthode print(), alors je me retrouve avec la date 3 fois inscrite au début et au milieu de l'exception.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 2018-03-21 18:05:53.749 Exception in thread "main" java.lang.NullPointerException at test.Main.main(Main.java:9)
Comment n'afficher la date qu'une seule fois, au début de l'exception ?
Une autre solution est possible, c'est d'afficher un log via log4j à chaque fois qu'une exception non gérée arrive, mais je ne sais pas comment faire si l'exception n'est pas catchée...
Partager