Scala: Drucken Sie einen Stapel-Trace in meiner Scalatra App

9

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?

    
randombits 18.09.2013, 18:55
quelle

4 Antworten

2

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.

    
James Adam 18.09.2013, 19:06
quelle
4

Verwenden Sie ExceptionUtils von Apache Commons Lang:

%Vor%     
Fernando Correia 27.06.2014 20:20
quelle
2

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.

    
Kelsey Gilmore-Innis 18.09.2013 19:09
quelle
1

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.

    
dsantaolalla 02.11.2017 18:18
quelle