SLF4Jを使った例外のログ記録

SLF4Jを使用した例外のログ記録

1. 概要

このクイックチュートリアルでは、SLF4JAPIを使用してJavaで例外をログに記録する方法を示します。 ロギングの実装としてslf4j-simpleAPIを使用します。

previous articlesの1つで、さまざまなロギング手法を調べることができます。

2. Mavenの依存関係

まず、pom.xmlに次の依存関係を追加する必要があります。


    org.slf4j
    slf4j-api
    1.7.25



    org.slf4j
    slf4j-simple
    1.7.25

これらのライブラリの最新バージョンは、Maven Centralにあります。

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. 結論

このクイックチュートリアルでは、SLF4J APIを使用して例外を記録する方法を見つけました。

コードスニペットはGitHub repositoryで利用できます。