Spring Bootでログを管理する

Spring Bootでログを管理する方法をご紹介します。Spring Bootはログ出力レベルが次のとおり5つあります。

  • trace
  • debug
  • info
  • warn
  • error

このログ出力レベルを制御するにあたって、ログを扱う共通クラスを作成して使用する方法がオススメです。後からの変更が簡単なためです。

コーデイング

ログを扱う共通クラスを作成します。

LoggingService.java

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class LoggingService {

// 引数に自クラスを設定する
private static final Logger logger = LoggerFactory.getLogger(LoggingService.class);

// システムに沿うようにラップする
public static void trace(String msg) {
logger.trace(msg);
}
public static void debug(String msg) {
logger.debug(msg);
}
public static void info(String msg) {
logger.info(msg);
}
public static void warn(String msg) {
logger.warn(msg);
}
public static void error(String msg) {
logger.error(msg);
}
}

この共通クラスをAutowiredやimportして次のように使用します。

logger.info("********************");
logger.warn("********************");
logger.error("********************");

設定ファイル

次に任意作業ですが設定ファイルについてです。設定ファイルを設定しなくてもコンソールにログ出力されます。外部ファイルにログ出力したい場合には設定が必要です。また、Spring Bootのデフォルトのログ出力レベルはINFOです。ですのでERROR、WARN、INFOのログが出力されます。出力レベルを変更するにも設定が必要です。

application.properties

#外部ファイルにログ出力する設定
logging.file=../logs/logtest.log

#ログ出力レベルを設定
logging.level.root=DEBUG
#logging.level.root=TRACE
#logging.level.root=DEBUG
#logging.level.root=INFO
#logging.level.root=WARN
#logging.level.root=ERROR

開発時にバグが発生した際などは、デフォルトより詳細なログを確認するためログレベルDEBUGも出力するように設定するといいかと思います。通常の開発をしている際は重いので、私はデフォルトのままにしています。

また、デフォルトではコンソールのみの出力でファイル出力されないことも要注意です。

実際のログ

呼び出すとこのような感じでログ出力されます。

2019-09-18 12:59:29.331 INFO 23044 --- [io-18080-exec-1] c.e.app.service.LoggingService : ********************
2019-09-18 12:59:29.332 WARN 23044 --- [io-18080-exec-1] c.e.app.service.LoggingService : ********************
2019-09-18 12:59:29.333 ERROR 23044 --- [io-18080-exec-1] c.e.app.service.LoggingService : ********************

出力ログの概要

出力されたログのそれぞれの意味は次のとおりです。

  • 日時(ミリ秒の精度で出力されます
  • ログレベル(ERROR、WARN、INFO、DEBUG、TRACE)
  • プロセスID
  • セパレータ(—
  • スレッド名(コンソール出力のため切り捨てられる可能性があるので括弧で囲まれています
  • クラス名
  • ログメッセージ

参考:Spring Boot Reference Documentation > Spring Boot Features > 4. Logging

Let's share SNS