やること
SpringBoot
等のフレームワークでException
を自作して、既知の挙動としてエラーを吐く場合であっても、スタックトレースはそのままログに表示されてしまいます。
つまり、エラーが起きている原因がアプリケーション内なのは明白なのに、単純に無駄な情報が表示されているということになります。
スタックトレースが長ければ読解の邪魔になりますし、ログ容量が増えすぎて問題を起こすこともあるため、余計な情報は無い方がよいです。
そこで、スタックトレースをフィルタリングします。
やり方
以下のようにフィルタリング関数を用意し、コンストラクタでsetStackTrace
することでできます。
パッケージ名はcom.wrongwrong.example
のような文字列で、ルートパッケージを指定します。
public class MyException extends RuntimeException {
static StackTraceElement[] filteringStackTrace(StackTraceElement[] elements) {
return Arrays.stream(elements)
.filter(it -> it.getClassName().startsWith("${パッケージ名}"))
.toArray(StackTraceElement[]::new);
}
public MyException(String msg) {
super(msg);
setStackTrace(filteringStackTrace(getStackTrace()));
}
}