`

log4jdbc

 
阅读更多

 

用法简单总结:

>到 http://code.google.com/p/log4jdbc/ 下载,log4jdbc4-1.2.jar(jdk1.6/1.7) 或log4jdbc3-1.2.jar(jdk1.4/1.5)

>加入SLF4J

>将 net.sf.log4jdbc.DriverSpy 代替你自己的驱动类配置(在application.properties中配置换掉即可)

>将你的jdbc.url加上"jdbc:log4"前缀,

如:jdbc:mysql://192.168.6.250:3306/SHAM

改为:

jdbc:log4jdbc:mysql://192.168.6.250:3306/SHAM

即可

开启log4jdbc日志记录级别

#用于 只记录SQL

 

log4j.logger.jdbc.sqlonly=DEBUG

 

#用于记录SQL的执行时间

 

log4j.logger.jdbc.sqltiming=DEBUG

 

#用于记录除ResultSets外的所有记录(除非遇到特殊问题,一般不用开启,因打印出的日志很多)

 

log4j.logger.jdbc.audit=OFF

 

#用于记录所有的关于resultset的记录,这个会打印出更多信息

 

log4j.logger.jdbc.resultset=OFF

 

#记录数据库连接的开关事件,对发现数据库连接泄露问题很有用

 

log4j.logger.jdbc.connection=OFF

 

 

日志还有其他可选项,参加http://code.google.com/p/log4jdbc/

 

官方给出的log4j实例:

 

!==============================================================================
! log4j.properties - An example configuration properties file for log4j.
!
! Logging levels are:
! DEBUG < INFO < WARN < ERROR < FATAL
!==============================================================================

! turn on the internal log4j debugging flag so we can see what it is doing
log4j.debug=true

!==============================================================================
! JDBC API layer call logging :
! INFO shows logging, DEBUG also shows where in code the jdbc calls were made,
! setting DEBUG to true might cause minor slow-down in some environments.
! If you experience too much slowness, use INFO instead.

! Log all JDBC calls except for ResultSet calls
log4j.logger.jdbc.audit=INFO,jdbc
log4j.additivity.jdbc.audit=false

! Log only JDBC calls to ResultSet objects
log4j.logger.jdbc.resultset=INFO,jdbc
log4j.additivity.jdbc.resultset=false

! Log only the SQL that is executed.
log4j.logger.jdbc.sqlonly=DEBUG,sql
log4j.additivity.jdbc.sqlonly=false

! Log timing information about the SQL that is executed.
log4j.logger.jdbc.sqltiming=DEBUG,sqltiming
log4j.additivity.jdbc.sqltiming=false

! Log connection open/close events and connection number dump
log4j.logger.jdbc.connection=FATAL,connection
log4j.additivity.jdbc.connection=false


! the appender used for the JDBC API layer call logging above, sql only
log4j.appender.sql=org.apache.log4j.FileAppender
log4j.appender.sql.File=./logs/sql.log
log4j.appender.sql.Append=false
log4j.appender.sql.layout=org.apache.log4j.PatternLayout
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=./logs/sqltiming.log
log4j.appender.sqltiming.Append=false
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=./logs/jdbc.log
log4j.appender.jdbc.Append=false
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=./logs/connection.log
log4j.appender.connection.Append=false
log4j.appender.connection.layout=org.apache.log4j.PatternLayout
log4j.appender.connection.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} %m%n

 

 

以下转载自:https://code.google.com/p/rapid-framework/wiki/log4jdbc

log4jdbc日志框架介绍

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

一.简单介绍

1.没有使用log4jdbc前sql显示:

select username,password from bitth_date >?and age <?and username =?  

2.使用log4jdbc后sql显示:

select username,password from bitth_date > to_date(‘2010-11-11’,’yyyy-mm-dd’)and age <20and username =‘qq2008’{executed in2 msec}

这样就可以直接拷贝上面的sql在PLSQL直接执行. 最后的 {executed in 2 msec} 为SQL执行时间.而如果mysql,日志信息将不会出现 to_date()

二.log4jdbc使用

1.spring xml配置(拦截需要处理的dataSource连接)

<beanid="log4jdbcInterceptor"class="net.sf.log4jdbc.DataSourceSpyInterceptor"/>  
  
<beanid="dataSourceLog4jdbcAutoProxyCreator"class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">  
   <propertyname="interceptorNames">  
       <list>  
          <value>log4jdbcInterceptor</value>          
       </list>  
   </property>  
   <propertyname="beanNames">  
       <list>  
          <value>dataSource</value>  
       </list>  
   </property>  
</bean>  

2.log4j.properties配置

log4j.logger.jdbc.sqlonly=OFF  
log4j.logger.jdbc.sqltiming=INFO  
log4j.logger.jdbc.audit=OFF  
log4j.logger.jdbc.resultset=OFF  
log4j.logger.jdbc.connection=OFF  

(日志信息如果全部为off,log4jdbc将不会生效,因此对性能没有任何影响)

3.下载slf4j

log4jdbc需要依赖slf4j日志框架. http://www.slf4j.org/

三.扩展说明

DataSourceSpyInterceptor为我自己扩展的一个拦截器类,扩展主要是使用AOP的方式,因为log4jdbc原来的方式不适合我的项目.具体源码为:

import org.aopalliance.intercept.MethodInterceptor;  
import org.aopalliance.intercept.MethodInvocation;  
  
publicclassDataSourceSpyInterceptorimplementsMethodInterceptor{  
  
    privateRdbmsSpecifics rdbmsSpecifics =null;  
      
    privateRdbmsSpecifics getRdbmsSpecifics(Connection conn){  
        if(rdbmsSpecifics ==null){  
            rdbmsSpecifics =DriverSpy.getRdbmsSpecifics(conn);  
        }  
        return rdbmsSpecifics;  
    }  
      
    publicObject invoke(MethodInvocation invocation)throwsThrowable{  
        Object result = invocation.proceed();  
        if(SpyLogFactory.getSpyLogDelegator().isJdbcLoggingEnabled()){  
            if(result instanceofConnection){  
                Connection conn =(Connection)result;  
                returnnewConnectionSpy(conn,getRdbmsSpecifics(conn));  
            }  
        }  
        return result;  
    }  
  
}  

四.相关链接

 

 

常见错误:

Unable to create initial connections of pool.

java.sql.SQLException: Driver:net.sf.log4jdbc.DriverSpy@5b74e91b returned null for URL:jdbc:log4jdbc:mysql://172.28.5.92/FunPlugin?useUnicode=true&characterEncoding=utf-8&rewriteBatchedStatements=true&allowMultiQueries=true&autoReconnect=true

at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:295)

 

解决: 

1: 你的驱动没有在类路径下

2: jdbc连接URL配错了

3: 这个问题反映的就是通过以上配置没有连接到DB

分享到:
评论

相关推荐

    [简单]log4jdbc-log4j2配置简记

    标题中的“log4jdbc-log4j2配置简记”指的是在Java开发中使用log4jdbc-log4j2库来监控和记录SQL查询的过程。log4jdbc是一个开源项目,它允许开发者通过日志系统来追踪数据库操作,而log4j2是log4j的升级版,提供了更...

    springboot log4jdbc 打印完整sql

    SpringBoot Log4jdbc 打印完整 SQL 详解 在 SpringBoot 项目中, Logging 是一个非常重要的模块,对于项目的维护和问题排查具有非常重要的作用。 Log4jdbc 是一个 Logging 工具,能够打印完整的 SQL 语句,包括参数...

    log4jdbc监控sql及执行时间

    1、在应用中jdbc url最前面添加jdbc:log4;比如oracle的url就变成了jdbc:log4jdbc:oracle:thin:@x.x.x.x:1521:dbname; 2、在日志系统中设置jdbc.sqlonly、jdbc.sqltiming等日志级别,可直接将log4jdbc doc中的日志...

    log4JDBC全部JAR

    **日志库Log4JDBC全面解析** 在Java开发中,日志系统是不可或缺的一部分,它可以帮助开发者跟踪程序运行情况,记录错误信息,便于后期排查问题。Log4JDBC是这样一种工具,它将日志功能引入到数据库操作中,通过透明...

    使用log4jdbc更有效的记录java sql日志.docx

    首先,Log4jdbc 支持 JDBC3 和 JDBC4 标准,这意味着它可以广泛应用于各种 Java 应用中。配置过程非常直观,只需要将应用中的 JDBC 驱动类替换为 `net.sf.log4jdbc.sql.jdbcapi.DriverSpy`,然后在 JDBC URL 前添加 ...

    log4jdbc.rar

    log4jdbc所需jar包下载,包括(log4jdbc-1.2.jar以及依赖的相关Jar包log4j-1.2.16/17.jar、slf4j-api-1.6.0/4.jar、slf4j-api-1.7.2.jar、slf4j-log4j12-1.6.1/4.jar、slf4j-log4j12-1.7.1.jar)

    log4jdbc3-1.2.1.jar

    log4jdbc可以将数据源执行的sql将占位符?替换成字符,并以日志打印出来. log4j配置: log4j.logger.jdbc.sqltiming=INFO 详情请看: http://code.google.com/p/rapid-framework/wiki/log4jdbc 如oracle示例: 原来的...

    log4jdbc4-1.2

    log4jdbc jar包,你懂的,关于sql的?,值可先显示

    log4jdbc完整依赖jar包

    log4jdbc完整依赖jar包 log4jdbc(log4j-1.2.17.jar+log4jdbc4-1.2.jar+slf4j-api-1.7.7.jar+slf4j-log4j12-1.7.7.jar)

    springmvc+mybatis+mysql+log4jdbc+excel 实现sql日志输出和excel导出

    在本项目中,"springmvc+mybatis+mysql+log4jdbc+excel 实现sql日志输出和excel导出",开发者旨在构建一个基于SpringMVC、MyBatis、MySQL数据库,利用Log4jdbc记录SQL日志,并通过Jxls进行Excel数据导出的功能完善的...

    log4jdbc所需jar包下载

    log4jdbc所需jar包下载,包括(log4jdbc-1.2.jar以及依赖的相关Jar包log4j-1.2.17.jar、slf4j-api-1.7.9.jar、slf4j-log4j12-1.7.9.jar)

    log4jdbc4-1.2.1.jar

    log4jdbc4-1.2.jar for JDBC 4 (JDK 1.6 and 1.7))

    Java实训教程 Java软件开发实战 Java开发框架 log4jdbc 共5页.pptx

    ### Java实训教程:Java软件开发实战与log4jdbc框架详解 #### 一、log4jdbc框架简介 在Java软件开发过程中,对SQL语句进行跟踪和调试是非常重要的一个环节。log4jdbc作为一款轻量级的SQL日志调试框架,能够帮助...

    SpringBoot+Spring data JPA+FreeMarker+shiro+log4jdbc

    SpringBoot+Spring data JPA+FreeMarker+Shiro+Log4jdbc是一个常见的技术栈组合,用于构建现代化的、轻量级的企业级Web应用。这个demo项目展示了如何将这些技术有效地集成,以实现数据持久化、模板渲染、权限管理...

    log4jdbc4相关jar包及ojdbc7jar包

    log4jdbc4依赖jar包, 包含: log4j-1.2.17.jar, log4jdbc4-1.2.1.jar, slf4j-api-1.7.9.jar, slf4j-log4j12-1.7.9.jar, 以及ojdbc7.jar

    log4jdbc.jar

    简单的封装了下,使打印执行的sql更容易看出来,方便调试

    log4jdbc-1.2.jar

    java运行依赖jar包

    log4jdbc-spring-boot-starter:将Log4jdbc与Spring Boot结合使用的启动器

    Log4jdbc Spring Boot Starter Log4jdbc Spring Boot Starter有助于在Spring Boot项目中快速方便地使用 。 Log4jdbc特别方便,因为它可以记录准备运行SQL。 而不是用'?'记录SQL 在需要插入参数值的地方(例如,...

    log4jdbc-remix-0.2.7.jar

    java运行依赖jar包

Global site tag (gtag.js) - Google Analytics