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リポジトリで入手できます。