该博客转至:http://www.jfinal.com/share/324 还有logback方式进行输出
我对 log4j jdbc日志配置做了一些修改和注释便于大家理解 防止不必要的信息在控制台输出
在开发过程中,我们希望控制台输出一些比较有价值的信息,JFinal开启调试模式以后,可以显示如下信息,这是极好的。
- JFinal action report -------- 2017-06-19 19:58:05 ------------------------------
- Url : GET /sys/terminal/getListData
- Controller : cn.ablefly.controller.sys.TerminalController.(TerminalController.java:1)
- Method : getListData
- Interceptor : cn.ablefly.core.auth.interceptor.SysLogInterceptor.(SysLogInterceptor.java:1)
- cn.ablefly.core.auth.interceptor.AuthorityInterceptor.(AuthorityInterceptor.java:1)
- Parameter : sord=asc page=1 nd=1497873485305 sidx= rows=10 _search=false
可惜的是,在显示sql语句方面,自带的调试输出效果就比较一般了,只会简单的显示出输出的sql语句,占位符也是用?号代替的。需要开启下面的注释掉的第二行代码
- ActiveRecordPlugin arp = new ActiveRecordPlugin(druidPlugin);
- //arp.setShowSql(true);
- //arp.setDevMode(true);
显示效果如下:
- Sql: select * from `evnet_terminal` where `id` = ?
显然,这种简陋的显示对我们调试复杂的sql语句和排错是没有太多价值的。那么我们就来动手改造一下吧!改造之后,我们的显示效果应该是这个样子的!完整的显示了执行的sql,占位符也被实际参数更换,更显示出了sql执行所花费的时间。
- 20:08:45.903 [qtp1803817267-27] DEBUG jdbc.sqltiming - com.alibaba.druid.filter.FilterChainImpl.preparedStatement_executeQuery(FilterChainImpl.java:2714)
- 10. select * from `evnet_terminal` where `id` = 14
- {executed in 0 msec}
1、确定所需要的jar包依赖。
不同项目所用的日志框架可能有所不同,所以项目中和日志有关的jar包也不尽相同,这里我只列出我发现的两种情况。
首先,必须引入的jar包包括如下三个:
- <dependency>
- <groupId>log4j</groupId>
- <artifactId>log4j</artifactId>
- <version>1.2.16</version>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-api</artifactId>
- <version>1.7.7</version>
- </dependency>
- <dependency>
- <groupId>com.googlecode.log4jdbc</groupId>
- <artifactId>log4jdbc</artifactId>
- <version>1.2</version>
- </dependency>
其中真正帮助我们显示完整sql数据的jar是log4jdbc-1.2.jar,该框架的详细介绍如下:
https://github.com/arthurblake/log4jdbc/blob/wiki/ProjectHome.md
还有一个jar包依赖,需要2选1,如果你的项目中已经引入了其中任何一个,就不需要再引入另一个了。2选1的jar包如下:
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>log4j-over-slf4j</artifactId>
- <version>1.7.7</version>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-log4j12</artifactId>
- <version>1.7.7</version>
- </dependency>
jar包的版本不是必须使用1.7.7的,其他版本也可以尝试。同时引入以上两个包会产生堆栈溢出问题,详情可参考这篇文档:
http://blog.csdn.net/kxcfzyk/article/details/38613861
2、修改数据库配置信息中的jdbcUrl配置和driverClass配置,示例如下:
- jdbcUrl = jdbc:log4jdbc:mysql://localhost:3306/evnet?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull
- driverClass=net.sf.log4jdbc.DriverSpy
注意,jdbcUrl中的"jdbc:"与":mysql"之间的"log4jdbc"就是我们对url的改变之处,其他的数据库描述符的配置,也是一样的思路,在适当的位置加上"log4jdbc"即可。而driverClass的配置是固定的。
3、修改Jfinal核心配置类,用包含四个参数的构造函数配置数据库连接池。
在大部分情况下,我们在项目的核心配置类中,配置连接池,不管是c3p0还是druid或者使用其他的连接池,我们都会用三个参数的构造方法,如下示例为建立一个druid连接池的封装方法:
- public static DruidPlugin createDruidPlugin() {
- DruidPlugin dp = new DruidPlugin(PropKit.get("jdbcUrl"), PropKit.get("user"), PropKit.get("password"));
- dp.addFilter(new StatFilter());
- dp.addFilter(new Slf4jLogFilter());
- WallFilter wall = new WallFilter();
- wall.setDbType("mysql");
- dp.addFilter(wall);
- return dp;
- }
我们只需要将这一行关键代码
- DruidPlugin dp = new DruidPlugin(PropKit.get("jdbcUrl"), PropKit.get("user"), PropKit.get("password"));
后面多加一个参数,即可指定所使用的driverClass,即代码改成
- DruidPlugin dp = new DruidPlugin(PropKit.get("jdbcUrl"), PropKit.get("user"), PropKit.get("password"),PropKit.get("driverClass"));
4、修改log4j.properties日志输出配置文件的主要配置如下:
log4j.rootLogger=INFO, stdout, file log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%n%-d{yyyy-MM-dd HH:mm:ss}%n[%p]-[Thread: %t]-[%C.%M()]: %m%n # Output to the File log4j.appender.file = org.apache.log4j.DailyRollingFileAppender log4j.appender.Threshold = DEBUG log4j.appender.file.DatePattern = '.'yyyy-MM-dd log4j.appender.file.File=logs/log.log log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%n%-d{yyyy-MM-dd HH:mm:ss}%n[%p]-[Thread: %t]-[%C.%M()]: %m%n
5、使用log4j.properties:我们需要在log4j.properties后面增加log4j jdbc日志配置
#记录除ResultSet调用以外的所有JDBC调用 log4j.logger.jdbc.audit = INFO ,jdbc log4j.additivity.jdbc.audit = false #只记录对ResultSet对象的JDBC调用 log4j.logger.jdbc.resultset = INFO ,jdbc log4j.additivity.jdbc.resultset = false #只记录执行的SQL。 log4j.logger.jdbc.sqlonly = INFO ,sql log4j.additivity.jdbc.sqlonly = false #记录有关执行的SQL的时间信息。 log4j.logger.jdbc.sqltiming = INFO ,console log4j.additivity.jdbc.sqltiming = true #记录连接打开/关闭事件和连接号码转储 log4j.logger.jdbc.connection = FATAL ,连接 log4j.additivity.jdbc.connection = false log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.layout=org.apache.log4j.SimpleLayout
6、控制台日志如下:
相关推荐
在SpringBoot整合MyBatis后,如何把SQL语句输出到日志文件中?MyBatis输出SQL的日志级别默认是debug,所以这里有两种实现方式: (1)把整个工程的日志级别都调整成debug,使用以下配置: logging: file: root....
Log4j是一款广泛使用的Java日志框架,它允许开发者灵活地控制日志信息的输出。这篇博客“使用log4j记录日志到数据库”将介绍如何配置和使用Log4j,以便将日志信息存储到数据库中,而非传统的文本文件。数据库存储的...
Apache Log4j 是一个流行的 Java 日志框架,它提供了灵活的日志记录机制,并支持将日志信息存储到不同的目的地,如控制台、文件或数据库等。 本文主要介绍如何使用 Log4j 将日志信息存储到 MySQL 数据库中。通过...
使用Hibernate,开发者可以避免编写大量的SQL语句,而是通过Java对象直接操作数据库,提高了开发效率和代码的可维护性。 SLF4J(Simple Logging Facade for Java)是一个日志门面接口,它为各种日志框架,如Logback...
在IT行业中,编程任务往往涉及处理各种数据操作和系统...使用合适的日志框架可以提供详细的运行信息,帮助开发者更好地理解和调试代码。在实际项目中,日志记录的规范性和详细程度会根据项目需求和团队标准进行调整。
10. **日志系统**:Hibernate 4.1.0.Final集成了Log4j和SLF4J日志框架,使得调试和监控更加方便。 总的来说,Hibernate 4.1.0.Final是企业级Java应用的理想选择,它的丰富功能、强大的性能以及对JPA(Java ...
9. **slf4j-api-1.6.1.jar**:Simple Logging Facade for Java (SLF4J) 提供一个抽象层,允许用户在最终的项目中插入任何日志框架,如log4j、logback等。在Hibernate中,SLF4J作为日志适配层,允许灵活切换日志实现...
Hibernate通过提供API和XML配置文件,使得开发者可以将数据库表与Java类映射,从而无需编写大量的SQL语句,就能进行数据操作。这大大提高了开发效率,降低了代码的复杂性。 在Hibernate 4.0.0.Final版本中,最重要...
Hibernate是一种开源的ORM框架,它通过映射Java对象到关系数据库,使得开发者无需编写大量的SQL语句,就能进行数据操作。在Hibernate 5.3.5.Final版本中,框架性能得到了优化,同时提供了更多新的特性和改进。 二、...
2. **使用Log4j记录日志**:在需要记录日志的类或方法中,使用`Logger`对象进行日志输出。 ```java import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class ...
尽管具体更新日志未在提供的信息中列出,但通常这样的版本升级会针对之前版本存在的问题进行改进,增强用户体验,并保持与最新Hibernate框架的兼容性。 2. **核心功能介绍:** - **可视化ORM设计**:开发者可以...
在Java开发中,Hibernate提供了一种强大的方式来处理数据库操作,将复杂的SQL语句封装在对象中,使得代码更加简洁、可读性更强。本压缩包“hibernate框架jar包”包含了使用Hibernate框架进行开发时所需的所有关键库...
在“ShineBlog Final”这个文件名中,我们可以推测这是该博客系统的最终版本,可能包含了所有上述功能的完整实现。对于学习和理解ASP开发的博客系统,这是一个很好的实践案例。通过查看源代码,可以深入学习ASP编程...
这个压缩包“hibernate-release-4.3.1.Final.rar”包含了Hibernate 4.3.1.Final版本的源码、文档和相关库文件,为我们深入学习和使用Hibernate提供了一个完整的资源包。 1. Hibernate概述 Hibernate是一个开源的...
Hibernate则是著名的对象关系映射(Object-Relational Mapping,ORM)工具,它允许开发者使用面向对象的方式来操作数据库,而无需关心底层SQL语句。在.NET环境中,NHibernate是其对应的实现。FastSpring.NetV2.05-...
9. **mybatis-3.1.0-modify.jar**:MyBatis是一个轻量级的持久层框架,它简化了SQL操作,通过XML或注解方式将SQL语句和Java代码绑定,实现了DAO层的高效开发。 10. **spring-webmvc-3.2.2.RELEASE.jar**:Spring ...
**Hibernate框架**是一种用于Java应用的**对象关系映射**(Object-Relational Mapping, ORM)解决方案,它允许开发者使用面向对象的方式操作数据库中的表(即执行CRUD操作),而无需直接编写SQL语句。 - **ORM**:...
3. **lib目录**:在压缩包中的"lib"目录下,通常会包含Hibernate框架所需的所有依赖库,包括JPA规范实现、数据库驱动、日志框架等。这些库是运行Hibernate应用程序所必需的,开发者需要将它们添加到项目的类路径中。...
Mybatis是一个持久层框架,它简化了SQL操作,将SQL语句与Java代码分离,通过XML或注解配置来映射SQL和Java对象。Mybatis支持动态SQL,可以编写复杂的查询,同时它的缓存机制可以提高数据访问速度。 在Spring和...