https://code.google.com/p/log4jdbc/ (官方地址)
官方说明文档中讲述要更换jdbc驱动driver和链接的url,例如:
String jdbcdriver = net.sf.log4jdbc.DriverSpy
String jdbcurl = jdbc:log4jdbc:derby://localhost:1527//db-derby-10.2.2.0-bin/databases/MyDatabase
-------------------------------------------------------------------------------------
上述是官方要求的方式,下面笔者介绍一下在SpringMvc+MyBatis3.2.1中配置log4jdbc的代码:
首先需要几个关键jar包:
log4j-1.2.17.jar, log4jdbc4-1.2.jar, mybatis-3.2.1.jar, mybatis-spring-1.2.0.jar, slf4j-api-1.7.6.jar, slf4j-log4j12-1.7.6.jar
下面是关键性代码:
DataSourceSpyInterceptor.java代码如下:
package com.shihuan.interceptor;
import java.sql.Connection;
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import net.sf.log4jdbc.ConnectionSpy;
import net.sf.log4jdbc.RdbmsSpecifics;
import net.sf.log4jdbc.DriverSpy;
import net.sf.log4jdbc.SpyLogFactory;
public class DataSourceSpyInterceptor implements MethodInterceptor {
private RdbmsSpecifics rdbmsSpecifics = null;
private RdbmsSpecifics getRdbmsSpecifics(Connection conn) {
if (rdbmsSpecifics == null) {
rdbmsSpecifics = DriverSpy.getRdbmsSpecifics(conn);
}
return rdbmsSpecifics;
}
@Override
public Object invoke(MethodInvocation invocation) throws Throwable {
Object result = invocation.proceed();
if (SpyLogFactory.getSpyLogDelegator().isJdbcLoggingEnabled()) {
if (result instanceof Connection) {
Connection conn = (Connection)result;
return new ConnectionSpy(conn, getRdbmsSpecifics(conn));
}
}
return result;
}
}
引用
上述java代码中import net.sf.log4jdbc.RdbmsSpecifics;和
import net.sf.log4jdbc.DriverSpy;两句正常是不能被引用的,因为从官方下载的log4jdbc4-1.2.jar中RdbmsSpecifics和DriverSpy的级别不是public的,所以在外部的类中无法被引用,笔者这里是下载了官方的源代码并做了少许的更改,就是在方法前加了public,这样改动后就可以进行import了。
在applicationContext.xml文件中加入如下代码:
<bean id="log4jdbcInterceptor" class="com.shihuan.interceptor.DataSourceSpyInterceptor" />
<bean id="dataSourceLog4jdbcAutoProxyCreator" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="interceptorNames">
<list>
<value>log4jdbcInterceptor</value>
</list>
</property>
<property name="beanNames">
<list>
<value>dataSource</value>
</list>
</property>
</bean>
在web.xml中要有如下代码(Log4jConfigListener要在ContextLoaderListener之前加载):
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:log4j.properties</param-value>
</context-param>
<!--
<context-param>
<param-name>log4jRefreshInterval</param-name>
<param-value>60000</param-value>
</context-param>
-->
<!-- 监听器,用于初始化log4j日志框架的 -->
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml,classpath:spring-mybatis.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
log4j.properties文件代码如下:
log4j.rootLogger=info,console,file
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%-p [%t]: (%F:%L) - %m%n
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=E:/logs/mybatisserver/log4j.log
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d\: at %l%n %-p - %m%n
#log4j.logger.com.ibatis=debug
#log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=debug
#log4j.logger.com.ibatis.common.jdbc.ScriptRunner=debug
#log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=debug
#log4j.logger.java.sql.Connection=debug
#log4j.logger.java.sql.Statement=debug
#log4j.logger.java.sql.PreparedStatement=debug
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
引用
上述做法要依赖Spring的Aop,注意这种配置不用改变原始的jdbc中url链接字符串了。
笔者最后在控制台打印的结果如下:
INFO [http-bio-8080-exec-1]: (Slf4jSpyLogDelegator.java:370) - select ID,STOCK, VALUE from stocks where ID = 9
{executed in 0 msec}
INFO [http-bio-8080-exec-1]: (Slf4jSpyLogDelegator.java:370) - select ID, STOCK, VALUE from stocks
{executed in 0 msec}
INFO [http-bio-8080-exec-1]: (Slf4jSpyLogDelegator.java:370) - insert into stocks (STOCK, VALUE) values ('我的中国2125950289', '20140501')
{executed in 0 msec}
INFO [http-bio-8080-exec-1]: (Slf4jSpyLogDelegator.java:370) - update stocks SET STOCK = 'jzg2125950289', VALUE = '0.7295182' where ID = 9
{executed in 0 msec}
INFO [http-bio-8080-exec-1]: (Slf4jSpyLogDelegator.java:370) - delete from stocks where ID = 14
{executed in 0 msec}
五月 01, 2014 4:36:52 下午 org.apache.jasper.compiler.TldLocationsCache tldScanJar
信息: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
WARN [http-bio-8080-exec-1]: (MyInterceptor.java:71) - 调用方法:com.shihuan.controller.StockController.indexStockBean(); 花费时间:3094 ms.返回网页:index.jsp
- 大小: 29.6 KB
分享到:
相关推荐
2. **slf4j-api-1.8.0-beta0.jar** 和 **slf4j-log4j12-1.8.0-beta0.jar**:Simple Logging Facade for Java (SLF4J) 是一个用于各种日志框架的抽象层,如Log4j、java.util.logging等。这两个JAR文件分别是SLF4J API...
Log4jdbc 是一个非常实用的 Java SQL 日志框架,它通过代理模式来拦截常见的 JDBC 驱动,如 Oracle、Derby、MySQL、PostgreSQL、H2、HSQLDB 等,使得开发者能够轻松地记录和分析 SQL 操作。这个框架的核心优势在于其...
在本项目中,"springmvc+mybatis+mysql+log4jdbc+excel 实现sql日志输出和excel导出",开发者旨在构建一个基于SpringMVC、MyBatis、MySQL数据库,利用Log4jdbc记录SQL日志,并通过Jxls进行Excel数据导出的功能完善的...
如果启用了JDBC日志记录(`SpyLogFactory.getSpyLogDelegator().isJdbcLoggingEnabled()`返回`true`),并且返回的结果是一个`Connection`对象,则将原始连接包装成`ConnectionSpy`对象并返回。 #### 四、Spring配置...
Log4j 是一个功能强大且广泛使用的日志记录工具,特别是在 SSM(Spring、Spring MVC、Mybatis)整合项目中,合理地配置 Log4j 对项目的日志记录和输出至关重要。本文将详细介绍 SSM 整合中的 Log4j 配置详情,帮助...
在开发和性能调优过程中,Log4jdbc能提供宝贵的数据库操作日志,帮助开发者了解数据库性能瓶颈,从而优化数据库查询。 在实际项目中,这些技术的集成通常包括以下步骤: 1. 配置SpringBoot,添加对应的依赖,如...
Log4j2是一款广泛使用的日志框架,它提供了灵活且高效的日志记录功能。本示例将详细介绍如何配置并使用Log4j2将日志信息记录到MySQL数据库中。 首先,我们要理解Log4j2的核心概念。Log4j2主要包括以下几个组件: 1...
Apache Log4j 是一个流行的 Java 日志框架,它提供了灵活的日志记录机制,并支持将日志信息存储到不同的目的地,如控制台、文件或数据库等。 本文主要介绍如何使用 Log4j 将日志信息存储到 MySQL 数据库中。通过...
在IT行业中,日志管理是系统监控和故障排查的关键环节,而Log4j作为Java领域广泛应用的日志框架,因其灵活性和高效性深受开发者喜爱。本文将深入探讨如何使用Log4j将日志信息写入数据库,以实现更高级别的日志管理和...
总结起来,本文介绍了如何结合Log4j和Ibatis来输出SQL日志。通过调整Log4j的配置,开发者可以方便地查看并理解应用程序中的数据库操作,从而提高代码的可维护性和性能。在实际开发中,合理地使用日志记录能够极大地...
在这个场景中,我们使用了SLF4J(Simple Logging Facade for Java)作为日志抽象层,它为各种日志框架提供了统一的API,而SLF4J-log4j12-1.5.0.jar和slf4j-api-1.5.0.jar正是SLF4J与Log4j之间的桥梁,使得我们可以...
关于日志,Log4j是一个广泛使用的Java日志框架,它允许开发者记录应用程序运行过程中的事件,提供不同级别的日志输出,如DEBUG、INFO、WARN、ERROR等。Log4j包含配置文件,可以设置日志级别、输出目的地(控制台、...
Log4j是Apache提供的一款强大的、灵活的日志框架,广泛应用于各种Java应用程序。本文将深入讲解如何利用Log4j将日志信息存储到数据库中。 首先,我们需要理解Log4j的基本架构。Log4j由三个主要组件构成:Logger...
Log4j是一款广泛使用的Java日志框架,它允许开发者灵活地控制日志信息的输出。这篇博客“使用log4j记录日志到数据库”将介绍如何配置和使用Log4j,以便将日志信息存储到数据库中,而非传统的文本文件。数据库存储的...
Log4j2是一款广泛使用的日志记录框架,它提供了丰富的日志处理功能和灵活的配置。JDBC Appender是Log4j2中的一个重要组件,它允许我们把日志信息存储到关系型数据库中,例如MySQL。这个配置尤其适用于需要长期保留和...
5. **Log4j**:Log4j 是一个流行的Java日志框架,提供了一种灵活的日志记录方式。通过配置,开发者可以选择不同的日志级别,控制日志输出的详细程度。在SSM+cxf框架中,Log4j用于记录系统运行时的信息,帮助调试和...
log4jdbc是一个优秀的数据库查询日志工具,而log4jdbc-1.2-forjdbi则是针对JDBI框架的特别定制版。这个版本与原版log4jdbc的主要区别在于,它从DEBUG级别的日志语句中去除了类和方法信息,这主要是因为当log4jdbc与...
3. **日志收集**:学习如何在应用程序中配置和使用日志框架(如Log4j、SLF4J等),以便记录SQL执行日志。 4. **日志解析**:理解如何从日志文件中提取SQL语句及其执行时间,这通常涉及到正则表达式或特定的日志解析...