JavaのLogger
クラスを使用しています。 ex.printStackTrace()
をLogger.log(loglevel, String)
に渡したいのですが、printStackTrace()
はvoid
を返します。そのため、例外のスタックトレースを渡して印刷することはできません。
void
をString
に変換する方法はありますか、または例外のスタックトレース全体を出力する他の方法はありますか?
void
は実際にはnothingness
であることを理解する必要があります。何も変換できません。 void
を文字列として印刷することになるかもしれませんが、(私を信じて)、あなたはそれを望んでいません。
あなたが探しているのは
// assuming ex is your Exception object
logger.error(ex.getMessage(), ex);
// OR
Logger.log(errorLogLevel, ex.getMessage(), ex)
これにより、設定したロガーを使用してエラーメッセージが出力されます。詳細については、Java Exception#getMessage() のドキュメントをご覧ください。
Java.util.logging.Logger#log(Level, String, Throwable)
を使用し、ex
を3番目の引数として次のように渡します。
LOGGER.log(Level.INFO, ex.getMessage(), ex);
また、別の選択肢は次のとおりです。
import org.Apache.commons.lang3.exception.ExceptionUtils;
log.error("Exception : "+ExceptionUtils.getFullStackTrace(e));
void
をString
に変換することはできません。そのような変換は存在しません。 void
はanythingを返さないため、取得する値はありません。
おそらくやりたいことは、代わりに ex.getMessage()
を使用して例外のメッセージを取得することです。
getStackTrace() メソッドを使用してStackTraceElementsの配列を取得し、そこから文字列を生成できます。それ以外の場合、最後のエラーメッセージだけで十分な場合は、Makotoが提案するgetMessage()
メソッドを使用します。
String
オブジェクトの配列からStackTraceElement
としてスタックトレースを取得するには、配列を反復処理する必要があります(JDK7ソースから取得)。
_StringBuilder builder = new StringBuilder();
StackTraceElement[] trace = getOurStackTrace();
for (StackTraceElement traceElement : trace)
builder.append("\tat " + traceElement + "\n");
_
別のオプションは、printStackTrace(PrintStream s)
を使用することです。ここで、スタックトレースを印刷する場所を指定できます。
_ByteArrayOutputStream out1 = new ByteArrayOutputStream();
PrintStream out2 = new PrintStream(out1);
ex.printStackTrace(out2);
String message = out1.toString("UTF8");
_
以下の形式を使用すると、スタックトレースを取得できます。
Java.util.logging.SimpleFormatter.format=%1$tF %1$tT [%4$-7s][%2$s] %5$s %6$s%n
このパターンのポイントは%6 $ sです。スタックトレースを出力します。
皆さん、ありがとうございました。を使用してスタックトレースの詳細を記録できます。
LOGGER.log(Level.INFO, ex.getMessage(),ex);
//ex is my exception object
マコトが言うように、おそらくex.getMessage()を実行したいでしょう。
さらに明確にするため、void
は何も返されないことを意味します。何にもキャストできません:)
以下を使用してスタックトレースを文字列に変換できます。 e
が例外オブジェクトの場合
StringWriter stringWriter= new StringWriter();
PrintWriter printWriter= new PrintWriter(stringWriter);
e.printStackTrace(printWriter);
String stackTraceAsString= stringWriter.toString();
PrintWriterを受け取るオーバーロードされたprintStackTraceメソッドがあります。
このようなことができます
Writer buffer = new StringWriter();
PrintWriter pw = new PrintWriter(buffer);
ex.printStackTrace(pw);
Logger.log(loglevel, buffer.toString());