Ich schreibe ein CustomLayout für Logback, weil ich Thread-Namen und Logger-Namen zwicken möchte. Die Logback-Dokumentation lautetWie wird die Stack-Trace vom benutzerdefinierten Logback-Layout gedruckt?
Im obigen Beispiel ignoriert die doLayout-Methode alle eventuellen Ausnahmen, die im Ereignis enthalten sind. In einer realistischen Layout-Implementierung würden Sie höchstwahrscheinlich auch den Inhalt von Ausnahmen drucken wollen.
Umm, ja, natürlich möchte ich Stack-Traces drucken, wenn die Standard-Implementierung würde. Aber ich kann keine Anweisungen dafür finden. Ich lud die Quellen herunter und schaute mich um. Folgendes scheint zu funktionieren:
/**
* How much stack to print if there's an exception.
*/
private List<String> stackOptionList = Arrays.asList("full");
@Override
public String doLayout(ILoggingEvent event) {
StringBuffer sbuf = new StringBuffer(128);
. . .
IThrowableProxy proxy = event.getThrowableProxy();
if (proxy != null) {
ThrowableProxyConverter converter = new ThrowableProxyConverter();
converter.setOptionList(stackOptionList);
converter.start();
sbuf.append(converter.convert(event));
sbuf.append(CoreConstants.LINE_SEPARATOR);
}
. . .
return sbuf.toString();
}
Gibt es einen besseren/zugelassenen Weg?
Guter Punkt - ein benutzerdefinierter Konverter ist viel sauberer. Vielen Dank! – vanmelle
@ceki Sollte man für jeden doLayout einen neuen ThrowableProxyConverter erstellen, starten und stoppen? – Ittai