In meiner Code-Basis ist die (sehr vereinfacht) folgende:Wie können Sysout- und Syserr-Streams vom Mischen abgehalten werden?
public static void main (String[] args) {
System.out.println("Starting application");
try {
System.out.println("About to validate");
validate(args);
catch (Exception e) {
e.printStackTrace();
}
}
public static void validate(String[] args) {
System.out.println("Your first arg is " + args[0]);
if (someProblemWith(args)) {
System.out.println("Your args are wrong. It should be: ...");
throw new BadArgsException(e);
}
}
die gut arbeitet. Beachten Sie, dass der obige Beispielcode erfunden ist und einfach dazu gedacht ist, mehrere Protokollanweisungen vor der Ausnahme und dem Stapeldruck anzuzeigen. Dies bedeutet oft, dass meine letzte Logging-Anweisung in der Mitte der Stack-Trace-Ausgabe verloren geht. Gibt es eine elegante Möglichkeit, die e.printStackTrace()
Anweisung zu warten, bis die System.out ihre Arbeit beendet hat? Ich bin im Wesentlichen auf der Suche nach der Stacktrace, um die allerletzte Sache gedruckt werden, wenn ein Fehler auftritt. Hier ist ein Beispiel für die Ausgabe von meinem Programm über:
java.lang.Throwable
....
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
Your args are wrong. It should be: ...
at java.lang.reflect.Method.invoke(Method.java:597)
at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:56)
OMG! Du hast die Bäche überquert! Protonische Totalumkehr! –