Ich verwende die Logger
-Klasse von Java. Ich möchte ex.printStackTrace()
an Logger.log(loglevel, String)
übergeben, aber printStackTrace()
gibt void
zurück. Daher kann ich die Stack-Trace der Ausnahme nicht übergeben und drucken.
Gibt es eine Möglichkeit, void
in String
umzuwandeln, oder gibt es andere Methoden, um den gesamten Stack-Trace der Ausnahmen zu drucken?
Sie müssen verstehen, dass void
tatsächlich nothingness
ist. Sie können nichts umwandeln. Sie könnten void
am Ende als Zeichenfolge drucken, aber (vertrauen Sie mir), das möchten Sie nicht.
Ich denke, was Sie suchen, ist
// assuming ex is your Exception object
logger.error(ex.getMessage(), ex);
// OR
Logger.log(errorLogLevel, ex.getMessage(), ex)
Dadurch wird die Fehlermeldung mit dem von Ihnen konfigurierten Logger gedruckt. Weitere Informationen finden Sie in den Java-Dokumenten zu Exception # getMessage ()
Verwenden Sie Java.util.logging.Logger#log(Level, String, Throwable)
und übergeben Sie ex
als drittes Argument wie folgt:
LOGGER.log(Level.INFO, ex.getMessage(), ex);
Sie können void
nicht in String
konvertieren. Eine solche Konvertierung ist nicht vorhanden. void
gibt nothing nicht zurück, sodass Sie keinen Wert abrufen können.
Sie möchten wahrscheinlich die Meldung der Ausnahme stattdessen über ex.getMessage()
erhalten.
Eine weitere Alternative wäre:
log.error("Exception : "+ExceptionUtils.getFullStackTrace(e));
Sie können die Methode getStackTrace () verwenden, um ein Array von StackTraceElements abzurufen und daraus einen String zu generieren. Andernfalls verwenden Sie, wenn nur die letzte Fehlermeldung ausreicht, die von Makoto vorgeschlagene Methode getMessage()
.
Um die Stack-Ablaufverfolgung als String
aus einem Array von StackTraceElement
-Objekten abzurufen, müssen Sie das Array durchlaufen (aus der JDK7-Quelle entnommen):
StringBuilder builder = new StringBuilder();
StackTraceElement[] trace = getOurStackTrace();
for (StackTraceElement traceElement : trace)
builder.append("\tat " + traceElement + "\n");
Eine andere Option ist printStackTrace(PrintStream s)
, wo Sie angeben können, wo der Stacktrace gedruckt werden soll:
ByteArrayOutputStream out1 = new ByteArrayOutputStream();
PrintStream out2 = new PrintStream(out1);
ex.printStackTrace(out2);
String message = out1.toString("UTF8");
Mit dem folgenden Format können Sie den Stack verfolgen:
Java.util.logging.SimpleFormatter.format=%1$tF %1$tT [%4$-7s][%2$s] %5$s %6$s%n
Der Punkt in diesem Muster ist% 6 $ s. Es wird die Stapelverfolgung gedruckt.
Danke euch allen. Ich kann die Stack-Trace-Details mit protokollieren
LOGGER.log(Level.INFO, ex.getMessage(),ex);
//ex is my exception object
Wie Makoto sagt, möchten Sie wahrscheinlich eine ex.getMessage () machen.
Zur weiteren Verdeutlichung bedeutet void
, dass nichts zurückgegeben wird. Du kannst nichts in etwas werfen :)
sie können Stacktrace in String konvertieren. Wenn e
das Ausnahmeobjekt ist
StringWriter stringWriter= new StringWriter();
PrintWriter printWriter= new PrintWriter(stringWriter);
e.printStackTrace(printWriter);
String stackTraceAsString= stringWriter.toString();
Es gibt eine überladene printStackTrace-Methode, die einen PrintWriter unterstützt.
Sie können so etwas tun
Writer buffer = new StringWriter();
PrintWriter pw = new PrintWriter(buffer);
ex.printStackTrace(pw);
Logger.log(loglevel, buffer.toString());