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で利用できます。