zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    矩阵图
    博客园评价
    团队冲刺
    团队冲刺
    第二阶段团队冲刺
    团队博客
    团队冲刺
    总结会议
    会议10
    会议09
  • 原文地址:https://www.cnblogs.com/phpdragon/p/8606821.html
Copyright © 2011-2022 走看看