今まで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