2012-04-11 11 views

Antwort

5

Alle modernen Logging Frameworks bestanden behandeln Exception Objekt Sonder:

log.error("Danger! High Voltage!", ex); 

Der Rahmen (es oder lassen) wird die Stack-Trace gut für Sie formatieren. Loggen Sie immer den gesamten Stack-Trace, es sei denn Sie wirklich wissen, was Sie tun. Andernfalls können Sie immer Ausnahmen von einem bestimmten Logger herausfiltern.

Beachten Sie auch, dass viele wichtige Ausnahme keine aussagekräftige Nachricht, NullPointerException ist ein wichtiges Beispiel.

+3

+1 für das Erlernen der Tags in der Antwort mit '[tag: java]'! –

+0

@MartijnCourteaux: yep, ich mag diese Funktion wirklich, siehe auch: http://meta.stackexchange.com/questions/123799 –

1

Ich würde natürlich für die Protokollierung der gesamten Stack-Spur gehen. Es ist viel einfacher, die Quelle auf diese Weise zu finden.

Ich weiß nicht, welche Bibliothek Sie für die Protokollierung verwenden, aber wenn es keine Ausnahmen unterstützt anmelden, können Sie die Stacktrace als String auf diese Weise erhalten:

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
PrintStream ps = new PrintStream(baos); 
exception.printStackTrace(ps); 
ps.close(); 
String stacktrace = baos.toString(); 
0

Wenn so etwas log4j verwenden, gibt es einen zusätzlichen Parameter für die Ausnahme, so Sie in der Regel so etwas schreiben:

catch(Exception e){ 
    logger.error("some message", e); 
} 

Log4j die Stacktrace des Druckens kümmern.

Eine Sache im Auge zu halten (zumindest für log4j) ist dies: Wenn Sie möchten, um eine Nachricht nicht anmelden, sondern nur die Ausnahme, müssen Sie verwenden:

logger.error("", e); 

nicht

logger.error(e); // bad usage! This uses e.toString()!! 
Verwandte Themen