Ajouter la date avant une exception affichée sur la sortie d'erreur
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
Code:
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();
}
} |
MyPrintStream.java
Code:
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);
}
} |
Output:
Code:
1 2 3
|
Exception in thread "main" java.lang.NullPointerException
2018-03-21 18:05:53.749 at test.Main.main(Main.java:9) |
Ce dont j'ai besoin:
Code:
1 2
| 2018-03-21 18:05:53.749 Exception in thread "main" java.lang.NullPointerException
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.
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...