---
title: Spring BootでLog4JDBCを使う springboot
tags: ["Log4JDBC", "Spring", "Spring Boot"]
categories: ["Programming", "Java", "org", "springframework", "boot"]
date: 2014-06-21T02:24:18Z
updated: 2014-06-21T02:24:18Z
---
Spring BootでLog4JDBCを使う方法というか、`DataSource`のカスタマイズ方法。
**Spring Boot 1.1.1.RELEASEで確認**。この設定方法はバージョンアップの度に変わってきたから注意・・
import net.sf.log4jdbc.Log4jdbcProxyDataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
@Configuration
public class AppConfig {
@Autowired
DataSourceProperties properties;
DataSource dataSource;
@ConfigurationProperties(prefix = DataSourceAutoConfiguration.CONFIGURATION_PREFIX)
@Bean(destroyMethod = "close")
DataSource realDataSource() {
DataSourceBuilder factory = DataSourceBuilder
.create(this.properties.getClassLoader())
.url(this.properties.getUrl())
.username(this.properties.getUsername())
.password(this.properties.getPassword());
this.dataSource = factory.build();
return this.dataSource;
}
@Bean
DataSource dataSource() {
return new Log4jdbcProxyDataSource(this.dataSource);
}
}
プロパティの設定方法は、[通常のやり方](http://docs.spring.io/spring-boot/docs/1.1.1.RELEASE/reference/htmlsingle/#common-application-properties)と同じようにできるはず。
`realDataSource()`の部分は普通に`DataSource`を作成してもいいけど、`DataSourceBuilder`を使うと
* `org.apache.tomcat.jdbc.pool.DataSource`
* `com.zaxxer.hikari.HikariDataSource`
* `org.apache.commons.dbcp.BasicDataSource`
のうちクラスローダー上にあるものを使う。
最後に`dataSource()`内(名前が重要)で`Log4jdbcProxyDataSource`でくるんでやればOK。
pom.xmlには
org.lazyluke
log4jdbc-remix
0.2.7
を追加。
logback.xmlには
こんな感じで設定しておけばOK。
JPAだけでなく`DataSource`経由のすべてのSQLログを出力できるので開発中はかなり便利。
`@Profile`つけて本番時は普通の`DataSource`を返すようにすればいいかも。