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