SLF4Jを使用した例外のロギング
1. 概要
このクイックチュートリアルでは、 SLF4JAPIを使用してJavaで例外をログに記録する方法を示します。 ロギングの実装としてslf4j-simpleAPIを使用します。
以前の記事の1つで、さまざまなロギング手法を調べることができます。
2. Mavenの依存関係
まず、pom.xmlに次の依存関係を追加する必要があります。
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.30</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.30</version>
</dependency>
これらのライブラリの最新バージョンは、 MavenCentralにあります。
3. 例
通常、すべての例外は、 Loggerクラスで使用可能なerror()メソッドを使用してログに記録されます。 この方法にはかなりの数のバリエーションがあります。 調査します:
void error(String msg);
void error(String format, Object... arguments);
void error(String msg, Throwable t);
まず、使用するLoggerを初期化します。
Logger logger = LoggerFactory.getLogger(NameOfTheClass.class);
エラーメッセージを表示するだけの場合は、次のように追加できます。
logger.error("An exception occurred!");
上記のコードの出力は次のようになります。
ERROR packageName.NameOfTheClass - An exception occurred!
これは簡単です。 ただし、例外(スタックトレースを含む)に関するより関連性の高い情報を追加するには、次のように記述します。
logger.error("An exception occurred!", new Exception("Custom exception"));
出力は次のようになります。
ERROR packageName.NameOfTheClass - An exception occurred!
java.lang.Exception: Custom exception
at packageName.NameOfTheClass.methodName(NameOfTheClass.java:lineNo)
複数のパラメーターが存在する場合、ロギング・ステートメントの最後の引数が例外である場合、SLF4Jは、ユーザーが単純なパラメーターではなく、最後の引数を例外として処理することを望んでいると想定します。
logger.error("{}, {}! An exception occurred!",
"Hello",
"World",
new Exception("Custom exception"));
上記のスニペットでは、Stringメッセージは渡されたオブジェクトの詳細に基づいてフォーマットされます。 メソッドに渡されるStringパラメーターのプレースホルダーとして中括弧を使用しました。
この場合、出力は次のようになります。
ERROR packageName.NameOfTheClass - Hello, World! An exception occurred!
java.lang.Exception: Custom exception
at packageName.NameOfTheClass.methodName(NameOfTheClass.java:lineNo)
4. 結論
このクイックチュートリアルでは、SLF4JAPIを使用して例外をログに記録する方法を学びました。
コードスニペットは、GitHubリポジトリで入手できます。