Scheint ein ziemlich einfaches Problem zu sein, aber ich würde gerne einen Stack-Trace protokollieren, wenn mein Fehlerhandler auf der obersten Ebene in Scaletra ausgelöst wird. Ich mache absichtlich eine Ausnahme in einer meiner Methoden, indem ich etwas so Triviales wie:
tue %Vor%Im Fehlerhandler sieht der Code wie folgt aus:
%Vor% Der Error-Handler selbst ist Scalatra-spezifisch, aber ich bin mir ziemlich sicher, dass die Antwort, die ich suche, mit jeder Vanilla-Scala-Technik gelöst werden kann. Gibt es etwas, was ich an dieser Stelle tun kann, um den StackTrace zu holen? Ich bin mir nicht sicher, ob sich die Anfrage im selben Thread wie der Fehlerhandler befindet, sonst könnte es dort eine Antwort geben. e.getStackTrace()
gibt mir [Ljava.lang.StackTraceElement;@1f6b6954
Was ist der beste Weg, um einen Stack-Trace hier ausgedruckt zu bekommen, damit ich ihn protokollieren und überprüfen kann, um Fehler in meinem schrecklichen Code zu beheben?
Ich denke, Sie möchten printStackTrace () statt getStackTrace. Wenn Sie eine Protokolldatei ausgeben, kann getMessage () hilfreich sein. Oder Sie versuchen, das ganze Ausnahmeobjekt an den Logger zu übergeben.
Verwenden Sie ExceptionUtils von Apache Commons Lang:
%Vor%Diese Frage hat mehrere Möglichkeiten, eine Exception-Stack-Ablaufverfolgung in eine Zeichenfolge zu konvertieren. printStackTrace gibt nur dann Ausgaben an System.err aus, wenn Sie einen Writer bereitstellen.
Wenn Sie den Standard-Logger verwenden: com.typesafe.scalalogging.Logger, druckt der Logger den Stack-Trace für Sie.
Sie können es einfach so verwenden:
%Vor%Es gibt bereits eine Überladung, die zwei Parameter akzeptiert, String und Throwable.
Tags und Links scala exception-handling scalatra