Logbackに関して

Javaのアプリケーションでのロギングに関して、
Log4Jが有名なんですが、その後継?のLogbackについて、調べてみました。
実際は、SLF4J+Logbackの構成になります。
ちなみにライセンスは、 Eclipse Public License v1.0 or Lesser General Public License version 2.1なので、
組み込む場合は、どのライセンスを選択するか?そのアプリケーションで、組み込んでも問題ないか確認した方がいいかもしれません。

環境に関して

今回の環境は、下記の環境で、検証しました。

SLF4Jとは

最近?なのか、SLF4Jがないとワーニングなったりするフレームワーク
多くなっているぽい気がします。
SLF4Jは、Simple Logging Facade for Javaの略です。
Javaのロギング実装は、デフォルトのjava.util.loggingとかlog4jとかlogbackなど、
いろいろあるのですが、その実装を柔軟に切り替えることが出来るようにしているものです。
デザインパターンのFacadeパターンが採用されています。

Logbackの設定

POMファイルの依存関係を定義する部分にlogbackとslf4jを追加します。

<dependency>
	<groupId>ch.qos.logback</groupId>
	<artifactId>logback-classic</artifactId>
	<version>${logback.version}</version>
</dependency>
<dependency>
	<groupId>org.slf4j</groupId>
	<artifactId>slf4j-api</artifactId>
	<version>${slf4j.version}</version>
</dependency>

次にlogback.xmlの設定ファイルを作成して、クラスパスに通せば完了です。
その設定ファイルの書き方ですが、log4jに似ているので、慣れれば簡単だと思います。
log4jと同じく、コンソールに出したり、ファイルに出したりすることが可能です。

コンソールに出力する場合
<configuration>
	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
		</encoder>
	</appender>
	<root level="debug">
		<appender-ref ref="STDOUT" />
	</root>
</configuration>
ファイルに出力する場合
<configuration>
	<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<File>/log/applicaiton.log</File>
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<FileNamePattern>applicaiton.%d{yyyy-MM-dd}.log</FileNamePattern>
			<maxHistory>30</maxHistory>            
		</rollingPolicy>
		<encoder>
			<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
		</encoder>         
	</appender>
	<root level="debug">
		<appender-ref ref="FILE" />
	</root>
</configuration>

Spring Frameworkに使う場合

Spring Frameworkのログ出力に使う場合は、Spring自体が、デフォルトで、commons-loggingを利用しているので、
それを除外する設定が必要になります。

<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-context</artifactId>
	<version>${spring.version}</version>
	<exclusions>
		<exclusion>
			<groupId>commons-logging</groupId>
			<artifactId>commons-logging</artifactId>
		</exclusion>
	</exclusions>    
</dependency>