Servlet开发 中使用 log4jdbc 记录 hibernate 的 SQL信息

一、前言

  使用log4jdbc在不改变原有代码的情况下,就可以收集执行的SQL文和JDBC执行情况

  平时开发使用的ibatis,hibernate,spring jdbc的sql日志信息,有一点个缺点是占位符与参数是分开打印的,如果想要拷贝sql至PLSQL Developer客户端直接执行,需要自己拼凑sql。而log4jdbc是在jdbc层的一个日志框架,可以将占位符与参数全部合并在一起显示,方便直接拷贝sql在PLSQL Developer等客户端直接执行,加快调试速度。

 

二、环境说明

Maven:3.5.2(点击下载) ,下载页

Tomcat:8.5.29(点击下载) ,下载页

JDK:jdk1.7.0_80(点击下载) ,下载页

MavenDependency:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.45</version>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>3.6.10.Final</version>
</dependency>
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-dbcp2</artifactId>
    <version>2.2.0</version>
</dependency>
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
    <version>2.5.0</version>
</dependency>
<!-- 日志 START -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.25</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.25</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>jcl-over-slf4j</artifactId>
    <version>1.7.25</version>
</dependency>
<dependency>
    <groupId>com.googlecode.log4jdbc</groupId>
    <artifactId>log4jdbc</artifactId>
    <version>1.2</version>
</dependency>
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
    <exclusions>
        <!--排除jdmk、jms的依赖引入-->
        <exclusion>
            <artifactId>jmxtools</artifactId>
            <groupId>com.sun.jdmk</groupId>
        </exclusion>
        <exclusion>
            <artifactId>jms</artifactId>
            <groupId>javax.jms</groupId>
        </exclusion>
    </exclusions>
</dependency>
<!-- 日志 END -->

 

 

三、log4jdbc的使用

1. 配置 log4j 的 src/main/resources/log4j.properties 的配置文件,如下所示:

#日志种类,参考链接 http://blog.csdn.net/dr_guo/article/details/50718063
#level是日志记录的优先级,分为OFF,TRACE,DEBUG,INFO,WARN,ERROR,FATAL,ALL
#线上配置需要关闭console控制台输出,否则tomcat的catalina.out文件会过大
#log4j.rootLogger=ALL,logDailyFile,logRollingFile
#开发配置需要开启console控制台输出
log4j.rootLogger=ALL,console,logDailyFile,logRollingFile

#输出到控制台
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
#log4j.appender.console.layout.ConversionPattern=%d -%m%n
log4j.appender.console.layout.ConversionPattern=[%-22d{yyyy-MM-dd HH:mm:ssS} | %p | %t | %l]: %n%m%n%n
#DEBUG,INFO,WARN,ERROR
log4j.appender.console.Threshold=DEBUG
#默认值是true,所有的消息都会被立即输出
log4j.appender.console.ImmediateFlush=TRUE


#DBlog, http://blog.csdn.net/u011686226/article/details/68932890
#以上日志种类都可以设置为 DEBUG , INFO 或 ERROR 级别。当设置为 FATAL 或 OFF 时,意味关闭记录。
#以下是一个采用 Log4j 作为具体日志系统的典型配置,将这些配置到 log4j.properties 里面:
#
#仅打印出执行 SQL
log4j.logger.jdbc.sqlonly=DEBUG,sql,console
#log4j.logger.jdbc.sqlonly=DEBUG,sql
#打印出执行 SQL 以及耗时信息
log4j.logger.jdbc.sqltiming=OFF,sqltiming,console
#打印出执行sql和结果集
log4j.logger.jdbc.resultsettable=OFF,console
#记录连接打开、关闭等信息,有利于调试数据库连接相关问题
log4j.logger.jdbc.connection=OFF,connection
#会产生更多的记录信息,因为记录了 ResultSet 的信息
log4j.logger.jdbc.resultset=OFF,jdbc
#记录除了 ResultSet 之外的所有 JDBC 调用信息,会产生大量的记录,有利于调试跟踪具体的 JDBC 问题
log4j.logger.jdbc.audit=OFF,jdbc


#the appender used for the JDBC API layer call logging above, sql only
log4j.appender.sql=org.apache.log4j.FileAppender
log4j.appender.sql.Append=true
log4j.appender.sql.layout=org.apache.log4j.PatternLayout
log4j.appender.sql.File=/home/server/tomcat8/xxx_server/logs/sql/sql.log
log4j.appender.sql.layout.ConversionPattern=-----> %d{yyyy-MM-dd HH:mm:ss.SSS} %m%n%n


#the appender used for the JDBC API layer call logging above, sql timing
log4j.appender.sqltiming=org.apache.log4j.FileAppender
log4j.appender.sqltiming.File=/home/server/tomcat8/xxx_server/logs/sql/sqltiming.log
log4j.appender.sqltiming.Append=true
log4j.appender.sqltiming.layout=org.apache.log4j.PatternLayout
log4j.appender.sqltiming.layout.ConversionPattern=-----> %d{yyyy-MM-dd HH:mm:ss.SSS} %m%n%n


#the appender used for the JDBC API layer call logging above
log4j.appender.jdbc=org.apache.log4j.FileAppender
log4j.appender.jdbc.File=/home/server/tomcat8/xxx_server/logs/sql/jdbc.log
log4j.appender.jdbc.Append=true
log4j.appender.jdbc.layout=org.apache.log4j.PatternLayout
log4j.appender.jdbc.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} %m%n


#the appender used for the JDBC Connection open and close events
log4j.appender.connection=org.apache.log4j.FileAppender
log4j.appender.connection.File=/home/server/tomcat8/xxx_server/logs/sql/connection.log
log4j.appender.connection.Append=true
log4j.appender.connection.layout=org.apache.log4j.PatternLayout
log4j.appender.connection.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} %m%n

 

2. 配置 src/main/resources/log4jdbc.properties 文件,可省略配置,不配置该文件,会使用默认值

#log4jdbc.debug.stack.prefix=
#log4jdbc.debug.stack.prefiis=
#log4jdbc.sqltiming.warn.threshold=
#log4jdbc.sqltiming.error.threshold=
log4jdbc.dump.booleanastruefalse=false
log4jdbc.dump.sql.maxlinelength=90
log4jdbc.dump.fulldebugstacktrace=false
log4jdbc.statement.warn=false
log4jdbc.dump.sql.select=true
log4jdbc.dump.sql.insert=true
log4jdbc.dump.sql.update=true
log4jdbc.dump.sql.delete=true
log4jdbc.dump.sql.create=true
log4jdbc.dump.sql.addsemicolon=false
log4jdbc.auto.load.popular.drivers=true
log4jdbc.trim.sql=true
log4jdbc.trim.sql.extrablanklines=true
log4jdbc.suppress.generated.keys.exception=false
#log4jdbc.drivers

 

3. 修改 dbconfig.properties 配置文件的 url 和 driverClassName

#url:jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8
#driverClassName:com.mysql.jdbc.Driver

url:jdbc:log4jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8
driverClassName:net.sf.log4jdbc.DriverSpy

 

经过这样的配置之后,就可以使用 log4jdbc 记录应用系统执行的SQL信息了。

 

 

PS:

https://www.cnblogs.com/xdp-gacl/p/4081848.html

https://www.cnblogs.com/cnjavahome/p/8421846.html

http://blog.csdn.net/u011686226/article/details/68932890

 

posted @ 2018-03-20 12:39  phpdragon  阅读(607)  评论(0编辑  收藏  举报