用法简单总结:
>到 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; } }
四.相关链接
- log4jdbc: http://code.google.com/p/log4jdbc/
- 另外一个对log4jdbc的扩展: http://code.google.com/p/log4jdbc-remix/
常见错误:
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配置简记”指的是在Java开发中使用log4jdbc-log4j2库来监控和记录SQL查询的过程。log4jdbc是一个开源项目,它允许开发者通过日志系统来追踪数据库操作,而log4j2是log4j的升级版,提供了更...
SpringBoot Log4jdbc 打印完整 SQL 详解 在 SpringBoot 项目中, Logging 是一个非常重要的模块,对于项目的维护和问题排查具有非常重要的作用。 Log4jdbc 是一个 Logging 工具,能够打印完整的 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全面解析** 在Java开发中,日志系统是不可或缺的一部分,它可以帮助开发者跟踪程序运行情况,记录错误信息,便于后期排查问题。Log4JDBC是这样一种工具,它将日志功能引入到数据库操作中,通过透明...
首先,Log4jdbc 支持 JDBC3 和 JDBC4 标准,这意味着它可以广泛应用于各种 Java 应用中。配置过程非常直观,只需要将应用中的 JDBC 驱动类替换为 `net.sf.log4jdbc.sql.jdbcapi.DriverSpy`,然后在 JDBC URL 前添加 ...
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)
log4jdbc可以将数据源执行的sql将占位符?替换成字符,并以日志打印出来. log4j配置: log4j.logger.jdbc.sqltiming=INFO 详情请看: http://code.google.com/p/rapid-framework/wiki/log4jdbc 如oracle示例: 原来的...
log4jdbc jar包,你懂的,关于sql的?,值可先显示
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记录SQL日志,并通过Jxls进行Excel数据导出的功能完善的...
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.jar for JDBC 4 (JDK 1.6 and 1.7))
### Java实训教程:Java软件开发实战与log4jdbc框架详解 #### 一、log4jdbc框架简介 在Java软件开发过程中,对SQL语句进行跟踪和调试是非常重要的一个环节。log4jdbc作为一款轻量级的SQL日志调试框架,能够帮助...
SpringBoot+Spring data JPA+FreeMarker+Shiro+Log4jdbc是一个常见的技术栈组合,用于构建现代化的、轻量级的企业级Web应用。这个demo项目展示了如何将这些技术有效地集成,以实现数据持久化、模板渲染、权限管理...
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
简单的封装了下,使打印执行的sql更容易看出来,方便调试
java运行依赖jar包
Log4jdbc Spring Boot Starter Log4jdbc Spring Boot Starter有助于在Spring Boot项目中快速方便地使用 。 Log4jdbc特别方便,因为它可以记录准备运行SQL。 而不是用'?'记录SQL 在需要插入参数值的地方(例如,...
java运行依赖jar包