在路上

 找回密码
 立即注册
在路上 站点首页 学习 查看内容

log4jdbc数据库访问日志框架使用

2017-2-16 13:16| 发布者: zhangjf| 查看: 1253| 评论: 0

摘要: log4jdbc官网地址 http://code.google.com/p/log4jdbc/ https://github.com/arthurblake/log4jdbc 当前最新版本是1.2, 支持JDBC3, JDBC4 log4jdbc是在jdbc层的一个日志框架,可以将占位符与参数全部合并在一起显 ...
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. logger 描述
  2. jdbc.sqlonly 仅记录SQL。
  3. jdbc.sqltiming 计时统计SQL的执行用时。
  4. jdbc.audit 记录所有的JDBC调用(ResultSet的除外)。Log量非常大,会影响性能,建议关闭。
  5. 一般情况下不需要开这个设定,除非追踪一个特定的JDBC问题。
  6. jdbc.resultset 比audit量更大,包括ResultSet对象,记录所有的JDBC记录。建议关闭
  7. 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. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
  3. <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"debug="false">
  4. <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
  5. <layout class="org.apache.log4j.PatternLayout">
  6. <param name="conversionPattern" value="%d %p [%c:%L] - %m%n" />
  7. </layout>
  8. <filter class="org.apache.log4j.varia.LevelRangeFilter">
  9. <param name="LevelMin" value="INFO" />
  10. </filter>
  11. </appender>
  12. <appender name="sql-appender" class="org.apache.log4j.RollingFileAppender">
  13. <param name="File" value="${log.dir}/logs/sql.log"/>
  14. <param name="MaxBackupIndex" value="20"/>
  15. <param name="MaxFileSize" value="20MB"/>
  16. <param name="Append" value="true"/>
  17. <layout class="org.apache.log4j.PatternLayout">
  18. <param name="ConversionPattern" value="%d %p [%c:%L] - %m%n"/>
  19. </layout>
  20. </appender>
  21. <appender name="sql-timing-appender" class="org.apache.log4j.FileAppender">
  22. <param name="File" value="${log.dir}/logs/sqltiming.log"/>
  23. <param name="MaxBackupIndex" value="20"/>
  24. <param name="MaxFileSize" value="20MB"/>
  25. <param name="Append" value="true"/>
  26. <layout class="org.apache.log4j.PatternLayout">
  27. <param name="ConversionPattern" value="%d %p [%c:%L] - %m%n"/>
  28. </layout>
  29. </appender>
  30. <appender name="jdbc-appender" class="org.apache.log4j.FileAppender">
  31. <param name="File" value="${log.dir}/logs/jdbc.log"/>
  32. <param name="MaxBackupIndex" value="20"/>
  33. <param name="MaxFileSize" value="20MB"/>
  34. <param name="Append" value="true"/>
  35. <layout class="org.apache.log4j.PatternLayout">
  36. <param name="ConversionPattern" value="%d %p [%c:%L] - %m%n"/>
  37. </layout>
  38. </appender>
  39. <appender name="jdbc-connection" class="org.apache.log4j.FileAppender">
  40. <param name="File" value="${log.dir}/logs/connection.log"/>
  41. <param name="MaxBackupIndex" value="20"/>
  42. <param name="MaxFileSize" value="20MB"/>
  43. <param name="Append" value="true"/>
  44. <layout class="org.apache.log4j.PatternLayout">
  45. <param name="ConversionPattern" value="%d %p [%c:%L] - %m%n"/>
  46. </layout>
  47. </appender>
  48. <!-- log SQL (pre-execution) plus exceptions caused by SQL -->
  49. <logger name="jdbc.sqlonly" additivity="false">
  50. <level value="debug"/>
  51. <appender-ref ref="sql-appender"/>
  52. </logger>
  53. <!-- log SQL with timing information, post execution -->
  54. <logger name="jdbc.sqltiming" additivity="false">
  55. <level value="fatal"/>
  56. <appender-ref ref="sql-timing-appender"/>
  57. </logger>
  58. <!-- only use the two logs below to trace ALL JDBC information,
  59. NOTE: This can be very voluminous! -->
  60. <!-- log all jdbc calls except ResultSet calls -->
  61. <logger name="jdbc.audit" additivity="false">
  62. <level value="fatal"/>
  63. <appender-ref ref="jdbc-appender"/>
  64. </logger>
  65. <!-- log the jdbc ResultSet calls -->
  66. <logger name="jdbc.resultset" additivity="false">
  67. <level value="fatal"/>
  68. <appender-ref ref="jdbc-appender"/>
  69. </logger>
  70. <!-- log connection open/close events and dump of all open connection numbers -->
  71. <logger name="jdbc.connection" additivity="false">
  72. <level value="fatal"/>
  73. <appender-ref ref="connection-appender"/>
  74. </logger>
  75. <!-- this log is for internal debugging of log4jdbc, itself -->
  76. <!-- debug logging for log4jdbc itself -->
  77. <logger name="log4jdbc.debug" additivity="false">
  78. <level value="debug"/>
  79. <appender-ref ref="stdout-appender"/>
  80. </logger>
  81. <root>
  82. <level value="info" />
  83. <appender-ref ref="CONSOLE" />
  84. </root>
  85. </log4j:configuration>
复制代码
程序调用示例
  1. public class Demo {
  2. private static Logger log = LoggerFactory.getLogger(Demo.class);
  3. public static void main(String[] args) throws SQLException {
  4. log.info("开始");
  5. Connection conn = DBUtils.getConnection();
  6. conn.createStatement().execute("select count(*) from xbm_region");
  7. JdbcUtils.executeQuery("select count(*) from xbm_region where id=?", "xxx");
  8. log.info("完成");
  9. }
  10. }
复制代码

来自:http://my.oschina.net/cloudcoder/blog/420510

最新评论

小黑屋|在路上 ( 蜀ICP备15035742号-1 

;

GMT+8, 2025-5-6 13:18

Copyright 2015-2025 djqfx

返回顶部