logbackを使う
昔はJavaにおけるロギングフレームワークといえばcommons-logging、log4jあたりが鉄板でしたが、今はlogback、slf4jあたりが鉄板なのかなと。
というわけで、logback+slf4jを使うための設定をまとめてみます。
自分はMavenを使ってモジュールのBuildをしているのでMavenのコンフィグレーションです。
まず、必要な依存性として以下を定義。
[code lang=”xml”]
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${org.slf4j.slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-ext</artifactId>
<version>${org.slf4j.slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${org.slf4j.slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jul-to-slf4j</artifactId>
<version>${org.slf4j.slf4j.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${ch.qos.logback.logback.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>${ch.qos.logback.logback.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-access</artifactId>
<version>${ch.qos.logback.logback.version}</version>
</dependency>
[/code]
あと、commons-loggingやlog4jのライブラリが依存に入っていると競合して想定した動作をしてくれないため、これらのライブラリが使われていないことをチェックする定義を書きます。
これは、maven enforcer プラグインの力を借ります。
[code lang=”xml”]
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<executions>
<execution>
<id>enforce-versions</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<bannedDependencies>
<searchTransitive>true</searchTransitive>
<excludes>
<exclude>commons-logging</exclude>
<exclude>log4j:log4j</exclude>
<exclude>org.slf4j:1.5*</exclude>
</excludes>
</bannedDependencies>
</rules>
<fail>true</fail>
</configuration>
</execution>
</executions>
</plugin>
[/code]
もし、このプラグイン設定をして Build でエラーが出るようなら、mvn dependency:tree コマンドで依存ツリーを表示し、commons-logging などが無いか確認します。
もし、使っているライブラリからの依存で読み込まれていたら、そのライブラリの dependency 定義で exclusion してやります。
[code lang=”xml”]
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${org.springframework.spring.version}</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
[/code]
これで、logback.xml を書いてやればOK。
logback.xml の書き方はあちこちに参考になる記事がありますのでそちらを見てみてください。
これで、変に依存ライブラリにログが吸い込まれたりすることもなく、ロギングコントロールを一本化できます。
ログはデバッグの要なので、ロギングフレームワークもしっかり固めておきたいところ。
Leave a comment