Spring 言語

Spring Bootでログ出力 Logback + SLF4J

今までJava開発ではLog4Jを使用してログ出力していましたが、今回新しいLogbackとSLF4Jを使用して実装してみようと思い、いろいろ調べてみました。

Logbackとは

Logbackは、Java で最も広く使用されているログ出力ライブラリの1つです。 Log4jよりも高速な実装を提供し、設定のためのより多くのオプションを提供し、古いログファイルをより柔軟にアーカイブできます。log4j の創始者であるCekiGülcü によって設計されたそうです。

SLF4Jとは

Commons Logging等のようにLogbackやLog4jなどのログ出力を委譲するログファサードライブラリです。ログ出力をしてってお願いする窓口のようなものです。ファサードライブラリを導入するとログ出力ライブラリをソース修正無しで切り替えることが可能となります。

Spring boot プロジェクトへの適応

Logbackは"spring-boot-starter-web"に含まれるため、pomファイルに新たに依存性を追加する必要無く使用することができます。

logback-spring.xmlの作成

Logbackの設定ファイル"logback-spring.xml"を"resources"フォルダ直下に以下の通り、作成してください。

・logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE logback>
<configuration>
    <!-- 標準出力用設定 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <charset>UTF-8</charset>
            <pattern>%d{yyyy/MM/dd HH:mm:ss} %-5level [%class] 
             [%thread] - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- ファイル出力用設定 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.
     RollingFileAppender">
        <file>application.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.
      FixedWindowRollingPolicy">
            <fileNamePattern>application.log.%i</fileNamePattern>
            <minIndex>1</minIndex>
            <maxIndex>7</maxIndex>
        </rollingPolicy>
        <triggeringPolicy class="ch.qos.logback.core.rolling.
        SizeBasedTriggeringPolicy">
            <maxFileSize>10MB</maxFileSize>
        </triggeringPolicy>
        <encoder>
            <charset>UTF-8</charset>
            <pattern>%d{yyyy/MM/dd HH:mm:ss} %-5level [%class] 
        [%thread] - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="DEBUG">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
    </root>
</configuration>

Log出力コーディング

・Test.java

package sample.logback;

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

@Slf4j
public class Test {

    public static void main(String[] args) {
        log.debug("Logback Test Debug");
        log.info("Logback Test Info");
        log.warn("Logback Test Warn");
        log.trace("Logback Test trace");
        log.error("Logback Test error");
    }
}

・出力されるログ

実行すると下記のログがConsoleと外部ファイルに出力されます。

12:34:22.682 [main] DEBUG  test.logback.Main - Logback Test Debug
12:34:22.682 [main] INFO  test.logback.Main - Logback Test Info
12:34:22.682 [main] WARN  test.logback.Main - Logback Test Warn
12:34:22.682 [main] TRACE  test.logback.Main - Logback Test trace
12:34:22.682 [main] ERROR  test.logback.Main - Logback Test error

-Spring, 言語