Spring Bootで詳細な例外情報をエラーログにて出す方法

こんにちは。 エキサイト株式会社の三浦です。

コードを書く上で、例外が起きたときに任意のエラーログを出力したい場面は多々出てきます。

今回は、Spring Bootで詳細な例外情報をエラーログにて出す方法を紹介します。

文字列だけのエラーログを出す方法

エラーログを出す上で最も簡単なのは、文字列だけのエラーログを出すことでしょう。

例えば、以下のような方法です。

@Slf4j
public class SampleClass {
    public void sample() {
        try {
            sampleException();
        } catch (Exception exception) {
            log.error("エラーが起きました: " + exception.getMessage());
        }
    }

    private void sampleException() {
        throw new RuntimeException("sampleException");
    }
}

エラーログ

これで十分であればよいですが、例えば起きた例外が何のクラスなのか、どの場所で起きたのかなど、詳細を知りたい場合はどうすれば良いでしょうか?

詳細なエラーログを出す方法

実はエラーログには、例外をそのまま渡すことが出来ます。

@Slf4j
public class SampleClass {
    public void sample() {
        try {
            sampleException();
        } catch (Exception exception) {
            log.error("エラーが起きました", exception);
        }
    }

    private void sampleException() {
        throw new RuntimeException("sampleException");
    }
}

エラーログ

このように、例外のクラス名や起きた場所の詳細などを出力する事ができます。

最後に

例外は、起きたことがわかったら終わりではなく、原因を調べて解決することも必要です。

今回のように例外の詳細がわかれば、調査がグッとしやすくなるのではないでしょうか。

ただし、このような出力方法だとエラーログの出力量が増えて見づらくなってしまうという問題点もあります。 文字列だけで十分エラー内容がわかる、という場面であれば敢えて使わないなど、必要十分なログ出力を考えることもまた大事です。

問題の発見・調査・解決のために、エラーログを適切に使っていきましょう。