やりたかったものはタイトル通りだった。
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 ドキュメントにこのメソッドありますけど。。使わない理由ってあります?
(はずかしい( ノД`)シクシク…)
紛らわしかった理由が。。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