Java - Spring Boot のログ出力実装に Log4j2 を使う
Spring Boot (1.1.9) のデフォルトのログ出力実装には Logback が使われてる。
自分は Log4j の設定方法に慣れてるので、 Log4j2 に切り替えてみる。
Spring Boot のデフォルトは SLF4J + Logback
依存関係を見てみるとこんな感じ。
org.springframework.boot:spring-boot-starter:jar:1.1.9.RELEASE:compile
+- org.springframework.boot:spring-boot-starter-logging:jar:1.1.9.RELEASE:compile
+- org.slf4j:jcl-over-slf4j:jar:1.7.7:compile
| \- (org.slf4j:slf4j-api:jar:1.7.7:compile - version managed from 1.7.5; omitted for duplicate)
+- org.slf4j:jul-to-slf4j:jar:1.7.7:compile
| \- (org.slf4j:slf4j-api:jar:1.7.7:compile - omitted for duplicate)
+- org.slf4j:log4j-over-slf4j:jar:1.7.7:compile
| \- (org.slf4j:slf4j-api:jar:1.7.7:compile - omitted for duplicate)
\- ch.qos.logback:logback-classic:jar:1.1.2:compile
+- ch.qos.logback:logback-core:jar:1.1.2:compile
\- (org.slf4j:slf4j-api:jar:1.7.7:compile - version managed from 1.7.6; omitted for duplicate)
SLF4J の図 ではこれに当たる。
JUL (java.util.logging) とか JCL (Apache Commons Logging) とか Log4j とか、
主要なのは全部かき集めてくれてていい感じ。
Log4j 1.x 系に切り替えるのは簡単 (だと思う)
依存関係から spring-boot-starter-logging
を外して、
spring-boot-starter-log4j
を追加すれば良さそう (試してないけど)。
Guide 61. Logging - Spring Boot Reference
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j</artifactId>
</dependency>
SLF4J の図 ではこれに当たるんだと思う。
でも今回使いたいのは Log4j2!
Log4j2 に切り替える
ちょっと長いけどこんな。
1.x 系と同じように spring-boot-starter-logging
を外して、
あとは Log4j2 を使うのに必要なものを1つずつ追加していく。
依存関係を一発解決してくれる Spring Boot らしさは損なっちゃうけど。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jul-to-slf4j</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.1</version>
</dependency>
処理の流れは spring-boot-starter-log4j
とほぼ同じ。
Log4j の部分が Log4j2 に変わっただけ。
あと Log4j 1.x 系のインターフェイスも残すなら、
log4j-1.2-api
を追加すればいいと思う。
Log4j 2.x 系に内部で転送してくれるみたい。
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-1.2-api</artifactId>
<version>2.1</version>
</dependency>
Spring Boot 1.2 では楽できそうな予感
こんなの出来てた!
Spring Boot 1.2 からは楽に使えそうな予感。
spring-boot-starter-log4j2 at v1.2.0.RC2 - spring-projects/spring-boot