log4jdbc官网地址
http://code.google.com/p/log4jdbc/
https://github.com/arthurblake/log4jdbc
当前最新版本是1.2, 支持JDBC3, JDBC4
log4jdbc是在jdbc层的一个日志框架,可以将占位符与参数全部合并在一起显示,方便直接拷贝sql在数据库客户端运行
未使用log4jdbc记录的SQL:
select count(*) from region where id=?
使用 log4jdbc记录的SQL:
select count(*) from region where id='gz'
log4jdbc特点
-
全面支持JDBC 3和JDBC 4!
-
容易配置,在大多数情况下,你需要做的是改变驱动类名net.sf.log4jdbc.DriverSpy的,并在前面加上“为jdbc:log4jdbc”到你现有的JDBC URL,建立你的日志记录类别。
示例:jdbc:log4jdbc:mysql://192.168.0.207:3306/mall
-
自动SQL输出。这大大提高了许多情况下的可读性和调试。
-
可以打印SQL的执行时间,用来调试SQL的执行效率。
-
生成SQL连接数信息,以帮助识别连接池或线程问题。
-
底层的JDBC驱动程序的兼容,使用JDK 1.4以上和SLF4J 1.x
log4jdbc设置的logger
1
2
3
4
5
6
7
|
logger 描述
jdbc.sqlonly 仅记录SQL。
jdbc.sqltiming 计时统计SQL的执行用时。
jdbc.audit 记录所有的JDBC调用(ResultSet的除外)。Log量非常大,会影响性能,建议关闭。
一般情况下不需要开这个设定,除非追踪一个特定的JDBC问题。
jdbc.resultset 比audit量更大,包括ResultSet对象,记录所有的JDBC记录。建议关闭
jdbc.connection 记录打开和关闭连接以及打开的连接数。用于追踪连接泄漏问题,非常有用。
|
使用方法
1: 在log4j配置文件中增加对应的logger
2: 改变驱动类名,
如MYSQL的:jdbc:log4jdbc:mysql://192.168.0.207:3306/mall
如Derby的:jdbc:log4jdbc:derby://localhost:1527//db-derby-10.2.2.0-bin/databases/MyDatabase
log4j配置样例
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
<?xml version=
"1.0"
encoding=
"UTF-8"
?>
<!DOCTYPE log4j:configuration SYSTEM
"log4j.dtd"
>
<log4j:configuration xmlns:log4j=
"http://jakarta.apache.org/log4j/"
debug=
"false"
>
<appender name=
"CONSOLE"
class
=
"org.apache.log4j.ConsoleAppender"
>
<layout
class
=
"org.apache.log4j.PatternLayout"
>
<param name=
"conversionPattern"
value=
"%d %p [%c:%L] - %m%n"
/>
</layout>
<filter
class
=
"org.apache.log4j.varia.LevelRangeFilter"
>
<param name=
"LevelMin"
value=
"INFO"
/>
</filter>
</appender>
<appender name=
"sql-appender"
class
=
"org.apache.log4j.RollingFileAppender"
>
<param name=
"File"
value=
"${log.dir}/logs/sql.log"
/>
<param name=
"MaxBackupIndex"
value=
"20"
/>
<param name=
"MaxFileSize"
value=
"20MB"
/>
<param name=
"Append"
value=
"true"
/>
<layout
class
=
"org.apache.log4j.PatternLayout"
>
<param name=
"ConversionPattern"
value=
"%d %p [%c:%L] - %m%n"
/>
</layout>
</appender>
<appender name=
"sql-timing-appender"
class
=
"org.apache.log4j.FileAppender"
>
<param name=
"File"
value=
"${log.dir}/logs/sqltiming.log"
/>
<param name=
"MaxBackupIndex"
value=
"20"
/>
<param name=
"MaxFileSize"
value=
"20MB"
/>
<param name=
"Append"
value=
"true"
/>
<layout
class
=
"org.apache.log4j.PatternLayout"
>
<param name=
"ConversionPattern"
value=
"%d %p [%c:%L] - %m%n"
/>
</layout>
</appender>
<appender name=
"jdbc-appender"
class
=
"org.apache.log4j.FileAppender"
>
<param name=
"File"
value=
"${log.dir}/logs/jdbc.log"
/>
<param name=
"MaxBackupIndex"
value=
"20"
/>
<param name=
"MaxFileSize"
value=
"20MB"
/>
<param name=
"Append"
value=
"true"
/>
<layout
class
=
"org.apache.log4j.PatternLayout"
>
<param name=
"ConversionPattern"
value=
"%d %p [%c:%L] - %m%n"
/>
</layout>
</appender>
<appender name=
"jdbc-connection"
class
=
"org.apache.log4j.FileAppender"
>
<param name=
"File"
value=
"${log.dir}/logs/connection.log"
/>
<param name=
"MaxBackupIndex"
value=
"20"
/>
<param name=
"MaxFileSize"
value=
"20MB"
/>
<param name=
"Append"
value=
"true"
/>
<layout
class
=
"org.apache.log4j.PatternLayout"
>
<param name=
"ConversionPattern"
value=
"%d %p [%c:%L] - %m%n"
/>
</layout>
</appender>
<!-- log SQL (pre-execution) plus exceptions caused by SQL -->
<logger name=
"jdbc.sqlonly"
additivity=
"false"
>
<level value=
"debug"
/>
<appender-ref ref=
"sql-appender"
/>
</logger>
<!-- log SQL with timing information, post execution -->
<logger name=
"jdbc.sqltiming"
additivity=
"false"
>
<level value=
"fatal"
/>
<appender-ref ref=
"sql-timing-appender"
/>
</logger>
<!-- only use the two logs below to trace ALL JDBC information,
NOTE: This can be very voluminous! -->
<!-- log all jdbc calls except ResultSet calls -->
<logger name=
"jdbc.audit"
additivity=
"false"
>
<level value=
"fatal"
/>
<appender-ref ref=
"jdbc-appender"
/>
</logger>
<!-- log the jdbc ResultSet calls -->
<logger name=
"jdbc.resultset"
additivity=
"false"
>
<level value=
"fatal"
/>
<appender-ref ref=
"jdbc-appender"
/>
</logger>
<!-- log connection open/close events and dump of all open connection numbers -->
<logger name=
"jdbc.connection"
additivity=
"false"
>
<level value=
"fatal"
/>
<appender-ref ref=
"connection-appender"
/>
</logger>
<!--
this
log is
for
internal debugging of log4jdbc, itself -->
<!-- debug logging
for
log4jdbc itself -->
<logger name=
"log4jdbc.debug"
additivity=
"false"
>
<level value=
"debug"
/>
<appender-ref ref=
"stdout-appender"
/>
</logger>
<root>
<level value=
"info"
/>
<appender-ref ref=
"CONSOLE"
/>
</root>
</log4j:configuration>
|
程序调用示例
1
2
3
4
5
6
7
8
9
10
11
12
|
public
class
Demo {
private
static
Logger log = LoggerFactory.getLogger(Demo.
class
);
public
static
void
main(String[] args)
throws
SQLException {
log.info(
"开始"
);
Connection conn = DBUtils.getConnection();
conn.createStatement().execute(
"select count(*) from xbm_region"
);
JdbcUtils.executeQuery(
"select count(*) from xbm_region where id=?"
,
"xxx"
);
log.info(
"完成"
);
}
}
来源:http://my.oschina.net/cloudcoder/blog/420510?fromerr=BV87XkL5
|