【Java】例外メッセージの書き方(エラー原因がすぐ分かるメッセージ術)

Java

はじめに

Java の例外処理で軽視されがちなのが、例外メッセージの書き方です。Javaで例外処理を書いていると、つい「エラーが発生しました」のように、ざっくりした例外メッセージを書いてしまいがちです。
しかし、いざ本番環境で障害が起きたとき、ログに出ているのがこのレベルのメッセージだと、以下のような状態に陥ってしまいます。

  • どの処理で失敗したのか分からない
  • どんな入力値が原因だったのか分からない
  • 再現条件が特定できない

今回は、例外メッセージの書き方についてログとして記載していきたいと思います。

他にも、体系的にJavaを学びたい方には以下の教材がおすすめです:

👉スッキリわかるJava入門 
👉スッキリわかるJava入門 実践編

 

なぜ例外メッセージが重要なのか

例外メッセージは、障害が発生したときに一番最初に見るものとなります。このメッセージで十分な情報がなければ、調査が難航になりがちです。例外メッセージが貧弱だと様々な運用保守上の不具合が発生します。

  • 「とりあえず再起動して様子見」が常態化する
  • 毎回、同じような障害調査に時間を取られる
  • 新しく入ったメンバーがログを見ても何も分からない

 

良い例外メッセージの条件

良い例外メッセージには次の要素が含まれています。

  • どこの処理で失敗したのか(コンテキスト)
  • 何をしようとしていたのか(目的)
  • どんな値が問題だったのか(パラメータ情報)
  • 原因の概要(可能なら)
  • 次に何をするべきか(対策のヒント)

 

悪い例・良い例

悪い例

何が?どこで?なぜ? すべて不明の状態となってしまう。

throw new RuntimeException("エラーが発生しました");

 

良い例

「どの処理」で「どんな値」で「何が問題」か明記されていると障害箇所が見つけやすくなります。

throw new Exception(
    "【ユーザ登録処理】パラメータが不正です。userId=" + userId + " は 1以上である必要があります。"
);

 

例外メッセージの構成テンプレート

開発中にチーム共通ルールとして、メッセージの構成テンプレートを指定しておくと運用がとても楽になります。

 

テンプレート例

チームで以下のようなテンプレートを定めておけば、開発者はメッセージを作成時に安易にメッセージを作成することを抑制することができます。

[時刻] 【処理名】{何をしたかったか} 中にエラー。入力値:{パラメータ}。理由:{概要}。

 

パラメータをどこまで含めるか

含める情報

  • 内部ID(一意のキーで特定できる値)
  • 数値やフラグ
  • 再現するためにに重要な入力情報

 

含めてはいけない情報

  • パスワード
  • トークン等
  • クレジットカード、メールアドレス
  • アプリの内部構造(SQL全展開など)

 

まとめ

例外メッセージというと、一見地味で優先度の低い部分に思われがちですが、システムの運用フェーズに入ると、その重要性は一気に表面化します。
「どの処理で」「どんな値で」「なぜ失敗したのか」が数行で明確に示されているだけで、原因調査のスピードは劇的に変わります。
記事を参考に、メッセージの内容について見直してみても良いかもしれません。

 

ドキュメント

【公式ドキュメント】
Java SE Specifications (oracle.com)

 

最後に

Javaの環境構築は、この記事を参照してみてください。
【開発環境構築】VS CodeでJavaを使用するための環境構築を実施する – SEもりのLog (selifemorizo.com)

以上、ログになります。
これからも継続していきましょう!!

Javaサーバーサイド関連
シェアする
おすすめIT本
良いコード/悪いコードで学ぶ設計入門

「ITエンジニア本大賞2023」技術書部門で大賞を受賞した本です。
・コードの可読性
・普段意識したほうが良いこと
・リファクタリング考え方
等、普段のコードを設計する際に意識することが書かれています。
コードのあるべき姿に迷ったら一度読んでみると良い本です。

仕組みと使い方がわかる Docker&Kubernetesのきほんのきほん

Dockerって何?となったときに私が最初に読んだ本です。
Dockerがどんな仕組みで動いているのか、コマンドでは何を命令しているのかを理解できるように、イラストを多用して説明しています。

1冊ですべて身につくJavaScript入門講座

「ITエンジニア本大賞2024」技術書部門で大賞を受賞した本です。
私が次に読もうと思っている本なのでおすすめとして挙げておきたいと思います。

コメント

タイトルとURLをコピーしました