Spring Bootのロギング

コードの作成

Commons Logging、Log4j、SLF4J、Logbackなど、さまざまなロギングフレームワークを使用できます。

Main.java

package sample.springboot;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.ConfigurableApplicationContext;

@SpringBootApplication
@EnableConfigurationProperties
public class Main {

    private static final Logger logger = LoggerFactory.getLogger(Main.class);

    public static void main(String[] args) {
        try (ConfigurableApplicationContext ctx = SpringApplication.run(Main.class, args)) {
            logger.error("error log");
            logger.warn("warn log");
            logger.info("info log");
            logger.debug("debug log");
            logger.trace("trace log");
        }
    }
}

実行結果

2015-04-29 17:31:25.023 ERROR 8872 --- [           main] sample.springboot.Main                   : error log
2015-04-29 17:31:25.023  WARN 8872 --- [           main] sample.springboot.Main                   : warn log
2015-04-29 17:31:25.023  INFO 8872 --- [           main] sample.springboot.Main                   : info log
  • デフォルトではINFOレベル以上のログが出力されます。
  • 形式は日付、ログレベル、PID、スレッド名、ロガー名、ログメッセージです。

ファイル出力

デフォルトでは標準出力だけにログが出力されます。ログファイルを指定すると、ファイルにも出力されます。ログファイルは10 MBごとにローテーションします。

ファイル名を指定する

$ java -jar build/libs/spring-boot-sample.jar --logging.file=sample.log

$ dir /b *.log
sample.log
  • logging.fileで出力ファイル名を指定します。
  • 例ではコマンドライン引数を使用していますが、プロパティファイルでも設定できます。
  • 対象ディレクトリが存在しない場合は自動的に作成されます。

フォルダーを指定する

$ java -jar build/libs/spring-boot-sample.jar --logging.path=logs

$ dir /b logs
spring.log
  • logging.pathでログ出力先フォルダーを指定します。
  • ログファイル名はspring.logになります。
  • ディレクトリが存在しない場合は自動的に作成されます。

ロガーごとにログレベルを設定する

$ java -jar build/libs/spring-boot-sample.jar --logging.level.sample.springboot.Main=TRACE

2015-04-29 18:14:17.969 ERROR 8288 --- [           main] sample.springboot.Main                   : error log
2015-04-29 18:14:17.970  WARN 8288 --- [           main] sample.springboot.Main                   : warn log
2015-04-29 18:14:17.970  INFO 8288 --- [           main] sample.springboot.Main                   : info log
2015-04-29 18:14:17.970 DEBUG 8288 --- [           main] sample.springboot.Main                   : debug log
2015-04-29 18:14:17.970 TRACE 8288 --- [           main] sample.springboot.Main                   : trace log
  • logging.level.[logger]=[log level]でロガーのログレベルを指定します。
  • ロガー名がFQCNの場合は、--logging.level.sample.springboot=DEBUGのようにパッケージ単位でも指定できます。