LoginSignup
1
0

More than 1 year has passed since last update.

log warnへスタックトレース出力

Posted at

やりたかったものはタイトル通りだった。
e.printStackTrace()から出力されているものを、Stringに変換して使いたい時に呼ばれるように。。したかった。

解決

方法は本当に簡単で

log.warn("### メッセージ後、スタックトレース出力されたらいいな", e);

結果)
2021-11-18 10:52:19.409 [] [] ERROR ### メッセージ後スタックトレース出力されたらいいな
java.lang.NullPointerException: null
原因発生地だらだら

時間かかった理由

検索をHow do I get e printStackTrace as string?にした。
結果)
https://www.baeldung.com/java-stacktrace-to-string#:~:text=The%20function%20printStackTrace()%20of,printStackTrace(pw)%3B
https://stackoverflow.com/questions/1149703/how-can-i-convert-a-stack-trace-to-a-string

二種類の方ほが出る。。

1) Throwableを理由する

ただ本番でJunitを使うのが気持ち悪かった

import org.junit.internal.Throwables;



log.warn("メッセージ後、スタックトレース出力されたらいいな。 message={}",
e.getMessage());
Throwables.getStacktrace(e));

2) exception eの中に一旦値はあるから値を全部出力する

ながいいいいい

catch (Exception e) {
StringBuilder sb = new StringBuilder();
for (StackTraceElement st : e.getStackTrace()) {
 sb.append(st).append("\r\n");
}
 log.warn("### メッセージ後、スタックトレース出力されたらいいな message={}",
 sb.toString());
}

どっちみち同じだったけど。。。方法1が簡単だからそれでやろうかと思ったら、
指摘もらった。。。ガンさん。。java ドキュメントにこのメソッドありますけど。。使わない理由ってあります?
image.png

(はずかしい( ノД`)シクシク…)
紛らわしかった理由が。。e = e.toString()で出ちゃうかなと思って、やってみたら
java.lang.NullPointerException: null しか出なかったので止めました。。。
だが↑のメソッドを使ったらe= throwable中身でスタックトレース出力に向かう処理があるらしいです。。。
h。。。あ。。

とにかく、勉強になりましった!

e.getMessage vs e.toString vs e.printStackTrace = ↑のwarn(string, throwable)

e.getMessage : エラー原因のみ

e.toString: エラーのException種類+原因

e.printStackTrace:エラー発生した経由すべて(の場合上記の~.getStackTraceする必要がある)

level種類
http://www.slf4j.org/api/org/apache/log4j/Level.html
loggerは。。関数。。どうかjava ドキュメントを読むようになればいいな。。
http://www.slf4j.org/api/org/slf4j/Logger.html

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0