参考:1. http://badqiu.iteye.com/blog/743100 2. https://code.google.com/p/log4jdbc/ 3. https://code.google.com/p/log4jdbc-log4j2/
|
1
2
3
4
5 |
<dependency> <groupId>org.bgee.log4jdbc-log4j2</groupId> <artifactId>log4jdbc-log4j2-jdbc4</artifactId> <version>1.16</version></dependency> |
扩展的一个拦截器类
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 |
public
class DataSourceSpyInterceptor implements
MethodInterceptor { private
RdbmsSpecifics rdbmsSpecifics = null; private
static Method method = null; private
RdbmsSpecifics getRdbmsSpecifics(Connection conn) { if(rdbmsSpecifics == null) { try
{ if
(null
== method) { method = DriverSpy.class.getDeclaredMethod("getRdbmsSpecifics", Connection.class); } method.setAccessible(true); rdbmsSpecifics = (RdbmsSpecifics) method.invoke(null, conn); method.setAccessible(false); } catch
(SecurityException e) { e.printStackTrace(); } catch
(NoSuchMethodException e) { e.printStackTrace(); } catch
(IllegalArgumentException e) { e.printStackTrace(); } catch
(IllegalAccessException e) { e.printStackTrace(); } catch
(InvocationTargetException e) { e.printStackTrace(); } } return
rdbmsSpecifics; } @Override public
Object invoke(MethodInvocation invocation) throws
Throwable { Object result = invocation.proceed(); if(SpyLogFactory.getSpyLogDelegator().isJdbcLoggingEnabled()) { if(result instanceof
Connection) { Connection conn = (Connection)result; return
new ConnectionSpy(conn,getRdbmsSpecifics(conn),SpyLogFactory.getSpyLogDelegator()); } } return
result; }} |
配置spring配置文件applicationContext.xml
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14 |
<bean
id="log4jdbcInterceptor"
class="net.sf.log4jdbc.DataSourceSpyInterceptor"
/> <bean
id="dataSourceLog4jdbcAutoProxyCreator"
class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"> <property
name="interceptorNames"> <list> <value>log4jdbcInterceptor</value> </list> </property> <property
name="beanNames"> <list> <value>dataSource</value> </list> </property> </bean> |
其中net.sf.log4jdbc.DataSourceSpyInterceptor为刚刚新建拦截器所在路径
配置你的日志配置文件,我的项目用的是logback,在logback.xml中配置
|
1
2
3
4
5 |
<!--log4jdbc --><logger
name="jdbc.sqltiming"
level="DEBUG"/><logger
name="jdbc.sqlonly"
level="DEBUG"/><logger
name="jdbc.audit"
level="ERROR"/><logger
name="jdbc.connection"
level="DEBUG"/> |
配置说明请参考https://code.google.com/p/log4jdbc-log4j2/ 中的说明4.2.2. Configure the loggers
现在你的日志文件中就会有优雅的 SQL 语句打印出来了,对原项目基本没有影响
原文:http://www.cnblogs.com/juforg/p/3566738.html