侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

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

2022-07-10 星期日 / 0 评论 / 0 点赞 / 68 阅读 / 10112 字

log4jdbc官网地址 http://code.google.com/p/log4jdbc/ https://github.com/arthurblake/log4jdbc 当前最新版本是1.2,

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特点

  1. 全面支持JDBC 3和JDBC 4!

  2. 容易配置,在大多数情况下,你需要做的是改变驱动类名net.sf.log4jdbc.DriverSpy的,并在前面加上“为jdbc:log4jdbc”到你现有的JDBC URL,建立你的日志记录类别。

    示例:jdbc:log4jdbc:mysql://192.168.0.207:3306/mall

  3. 自动SQL输出。这大大提高了许多情况下的可读性和调试。

  4. 可以打印SQL的执行时间,用来调试SQL的执行效率。

  5. 生成SQL连接数信息,以帮助识别连接池或线程问题。

  6. 底层的JDBC驱动程序的兼容,使用JDK 1.4以上和SLF4J 1.x

log4jdbc设置的logger

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配置样例

<?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>

程序调用示例

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("完成");    }}


广告 广告

评论区