こんな人向けの記事です
- SLF4J に統一したはずなのに、たまにコンソールに謎ログが出てる
-
org.apache.juli.logging.DirectJDKLog
なる謎のクラスのログをよく見る。。。 - gradle/maven で exclude すると除外できるのは知ってるけど、新規ライブラリを追加したタイミングで log4j の実装が混入してログがでなくなったりしている
- まとめて log4j や commons-logging を取り除きたい
Tips
以下の構文で一括 除外 ができる
configurations.all {
exclude
}
TL;DR
そのため、全てのプロジェクトに 各種ログライブラリ > SLF4J で出力、に必要なモジュールを入れて、各種ログライブラリの実装のほうを Exclude してやればよい。
build.gradle
dependencies {
// Used compile/coding time.
compile 'org.slf4j:slf4j-api:1.7.25'
// Used Runtime
runtime 'ch.qos.logback:logback-classic:1.2.3' // The log implementation.
runtime 'org.slf4j:jcl-over-slf4j:1.7.25' // Commons-Logging > SLF4J
runtime 'org.slf4j:jul-to-slf4j:1.7.25' // Java Util Logging > SLF4J
runtime 'org.apache.logging.log4j:log4j-to-slf4j:2.11.0' // Log4j 1&2 > SLF4J
}
configurations.all {
exclude group: 'log4j' // = Log4j implementation.
exclude module: 'log4j-slf4j-impl' // = SLF4J > Log4J Implementation. (Apache Side)
exclude module: 'slf4j-log4j12' // = SLF4J > Log4J Implementation. (SLF4J Side)
exclude module: 'log4j-over-slf4j' // = Old Log4j 1&2 > SLF4J
exclude module: 'slf4j-jdk14' // = SLF4J > JDK14 Binding
exclude module: 'commons-logging' // Because bridged by jcl-over-slf4j
exclude module: 'commons-logging-api' // Replaced by jcl-over-slf4j
}
(明日以降見直す)