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.log」になります。

また、Spring Bootのデフォルトのログ出力レベルはINFOです。ですのでERROR、WARN、INFOのログが出力されます。出力レベルを変更するにも設定が必要です。

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

#ログ出力レベルを設定
#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デフォルトログ管理Logbackを使う~概要編~
Spring Bootのデフォルトで出力されるログはLogbackが使用されています。 Logbackはspring-boot-sta...

参考

Spring Boot Reference Documentation > Spring Boot Features > 4. Logging