Spring Boot 2 ログ出力

標準

機能

ロガー

ログ出力インスタンス
通常、final、static属性とする

ログレベル

trace → debug → info → warn → error
設定したログレベル以上のレベルを出力可能
ログレベル:infoを設定した場合、trace、debugは使用×

ログパターン

<encoder>
 <pattern>パターン</pattern>
</encoder>
で指定
%変換指定子{オプション}

変換指定子 機能
%d{yyyyMMddHHmmss} 日時
%m ロガーに渡した文字列
%p ログレベル
%t スレッド名
%n 改行

pom.xml

<dependencies>
 <dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
 </dependency>
</dependencies>

application.properties

logging.file=test.log
logging.level.org.springframework.web=INFO
logging.level.root=WARN
logging.level.org.springframework.web=DEBUG
logging.level.org.hibernate=ERROR
TRACE、DEBUG、INFO、WARN、ERROR、FATAL、OFF

App.java

package lib.myId;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class App implements CommandLineRunner
{
 private static final Logger logger = LoggerFactory.getLogger(App.class);
 ~
 public void run(String… arg0) throws Exception {
  logger.debug("debug");
  logger.info("info");
  logger.error("error");
 }
}

ファイル構成

mySpringBatch
└src
 └main
  └java
   └lib
    └myId
     └App.java
 └resources
  └config
   └application.properties
 src
 └test
 target
 └classes
 .settings
 └~
 .classpath
 .project
 pom.xml

 test.log

logback

logback-spring.xml

フォーマット

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE logback>
<configuration>
 ログ設定①
 appender単位で個別のログを設定
 <appender name="設定名①" class="~">
  <file>ログファイル名①</file>
  <rollingPolicy class="~">
   <fileNamePattern>自動生成ファイル名パターン</fileNamePattern>
   <maxHistory>ログファイルの寿命</maxHistory>
  </rollingPolicy>
  <encoder>
   <charset>UTF-8</charset>
   <pattern>出力内容</pattern>
  </encoder>
 </appender>

 ログ設定②
 <appender name="設定名②" class="~">
  ~
 </appender>

 アプリ側参照名定義
 <logger name="参照名①"
  additivity="false">
  <level value="レベル" />
  <appender-ref ref="設定名①" />
 </logger>

 <logger name="参照名②"
  ~ />
 </logger>

 標準ログ設定
 <root level="INFO">
  <appender-ref ref="設定名" />
 </root>
</configuration>

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE logback>
<configuration>
 …
 <!–出力ルール①~コンソール~ –>
 <appender name="STDOUT"
  class="ch.qos.logback.core.ConsoleAppender">
  <target>System.out</target>
  <encoder>
   <pattern>出力内容</pattern>
  </encoder>
 </appender>
 <!–出力ルール②~WEB~ –>
 <appender name="FILE_WEB"
  class="ch.qos.logback.core.rolling.RollingFileAppender">
  <file>ログファイル名</file>
  <rollingPolicy
   class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
   <fileNamePattern>自動生成ファイル名パターン</fileNamePattern>
   <maxHistory>ログファイルの寿命</maxHistory>
  </rollingPolicy>
  <encoder>
   <charset>UTF-8</charset>
   <pattern>出力内容</pattern>
  </encoder>
 </appender>
 <!–出力ルール③~バッチ~ –>
 <appender name="FILE_BATCH"
  class="ch.qos.logback.core.rolling.RollingFileAppender">
  <file>ログファイル名</file>
  <rollingPolicy
   class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
   <fileNamePattern>自動生成ファイル名パターン</fileNamePattern>
   <maxHistory>ログファイルの寿命</maxHistory>
  </rollingPolicy>
  <encoder>
   <charset>UTF-8</charset>
   <pattern>出力内容</pattern>
  </encoder>
 </appender>
 
</configuration>

App.java

package lib.myId;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class App implements CommandLineRunner
{
 private static final Logger logger1 = LoggerFactory.getLogger(参照名①);
 private static final Logger logger2 = LoggerFactory.getLogger(参照名②);

 ~
 public void run(String… arg0) throws Exception {
  logger1.info("info");
  logger1.error("error");
  
  logger2.info("info");
  logger2.error("error");
 }
}