なぜ「StackTrace→Stringユーティリティ」が業務で役に立つのか
業務システムでは、例外が発生したときに「どこで」「何が」起きたのかを正確に把握することがとても重要です。 そのときに頼りになるのが スタックトレース(StackTrace) です。スタックトレースには、例外が発生したクラス・メソッド・行番号、そしてその呼び出し経路がすべて詰まっています。
通常、Javaでは e.printStackTrace() を使うと標準エラー出力にスタックトレースが表示されますが、 業務システムでは「ログフレームワークに渡したい」「監査用に文字列として保存したい」「APIレスポンスに一部だけ載せたい」など、 スタックトレースを「文字列」として扱いたい場面 がよく出てきます。
そこで便利なのが「StackTrace→Stringユーティリティ」です。 例外オブジェクトからスタックトレースを取り出し、文字列として扱えるようにすることで、 ログ出力・監査・通知・デバッグなど、さまざまな用途に応用できるようになります。
ここから、プログラミング初心者向けにステップバイステップで考えながら、 実務で使える StackTrace→Stringユーティリティを丁寧に解説していきます。
ステップ1 スタックトレースとは何かをイメージで理解する
「例外がたどってきた道の地図」です
まず、スタックトレースが何を表しているのかをイメージで押さえておきます。
例外が発生したとき、Javaは次のような情報を持っています。
- どのクラスのどのメソッドで例外が投げられたか
- そのメソッドを呼び出したのはどのメソッドか
- さらにその呼び出し元はどこか…という呼び出しの連鎖
これを「上から順番に」並べたものがスタックトレースです。
例えば、次のようなコードを考えます。
public class Sample {
public static void main(String[] args) {
a();
}
static void a() {
b();
}
static void b() {
throw new RuntimeException("エラー発生");
}
}
Javaこのプログラムを実行すると、スタックトレースは次のようなイメージになります。
Exception in thread "main" java.lang.RuntimeException: エラー発生
at Sample.b(Sample.java:12)
at Sample.a(Sample.java:8)
at Sample.main(Sample.java:4)
これが「スタックトレース」であり、 「例外がどの経路を通ってここまで来たか」を示す地図 のようなものです。
