kazusato / exception-handling-example

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

例外クラスごとのハンドリング指針

IllegalArgumentEcxeption

IllegalArgumentEcxeptionは、Java標準APIで定義された汎用の例外クラスのため、様々なライブラリーがスローする可能性がある。 そのため、これを一括してキャッチしても、詳細な情報を出力するのは難しい。 例外オブジェクトに発生した箇所や内容に関する情報が保持されている可能性はあるが、 様々な箇所で使われるため、例外オブジェクトに設定されたメッセージをそのまま応答電文に含めるのは 想定外の情報漏えいを招く可能性があり、避けるべきである。

したがって、発生箇所や内容に関する情報を応答電文に含めたいのであれば、例外ハンドラーではなく もっと発生箇所に近い場所でキャッチし、別の例外クラスに必要な情報を設定して再スローするのが 望ましい。

SQLException

JDBCによるデータベース操作で例外が発生した場合にスローされるクラス。 PostgreSQLを使用する場合のPSQLExceptionもSQLExceptionのサブクラスであり、ここでの対象となる。

ログ

ログレベル

ログレベルはTRACE, DEBUG, INFO, WARN, ERRORから選択できる。 Slf4jとしては(LoggerのメソッドとしてはFATALレベルも存在するが、Logbackをロギングに出力する場合、 LogbackにはFATALレベルが存在しないため、ERRORレベルにマッピングされてしまう。

  • ERROR: 本来起きえない事象が発生している状況。
  • WARN: 期待した状況ではないが、通常起きうる事象。
  • INFO: 期待した通りに動作している状況で、情報提供のために出力するもの。本番稼働時に、正常処理でも出力するログは、このレベルで出す。
  • DEBUG: 本番稼働時に出力する想定はない、動作状況の解析のために使う情報を出力するもの。
  • TRACE: DEBUGよりさらに詳細な、動作状況の追跡のために使う情報を出力するためのもの。

ERRORレベルは、そのレベルでログが出力された場合、システム全体が異常な状態にあると判断すべき事象に 限定して使用する方がよい。 API呼び出し元の振る舞いによって通常起きうる事象(バリデーションのエラーなど)は、特別な理由が無い限り、 WARNレベルにとどめ、ERRORレベルにはしない方が望ましい。 そうでないと、ERRORという最上位のログレベルのログが出力された場合でも、さらに内容を見ないと、 その重大度が判断できないということになってしまう。

About

License:Apache License 2.0


Languages

Language:Kotlin 99.4%Language:Shell 0.6%