log4j2打印Mybatis执行的SQL语句及SQL语句的执行时间
来源:互联网 发布:js随机数1到22 编辑:程序博客网 时间:2024/06/05 02:26
有关于log4j2的详细配置方式,建议大家观看log4j2配置文件详解,这里不做介绍
一、首先如需使用log4j2,得引入maven依赖
<!-- log4j2 --><dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>${log4j2.version}</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>${log4j2.version}</version> </dependency><dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-web</artifactId> <version>${log4j2.version}</version> </dependency>
注:本人使用的是2.7版本的log4j2
二、然后在项目的classpath下编写log4j2.xml
log4j2在启动的时候会默认加载名为log4j2.xml的配置文件
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="OFF" monitorInterval="1800"> <properties> <!-- log打印到本地的路径 --> <property name="LOG_HOME">D:/log4j2/mybatis/genertor/logs/</property> <property name="ERROR_LOG_FILE_NAME">error</property> </properties> <Appenders> <!-- 控制台打印日志 --> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d %-5p (%F:%L) - %m%n" /> </Console> <!-- 日志信息输出到文件配置 --> <RollingRandomAccessFile name="ErrorLog" fileName="${LOG_HOME}/${ERROR_LOG_FILE_NAME}.log" filePattern="${LOG_HOME}/${ERROR_LOG_FILE_NAME}.log.%d{yyyy-MM-dd}.gz"> <PatternLayout pattern="%d %-5p (%F:%L) - %m%n"/> <Policies> <!-- TimeBasedTriggeringPolicy指定的size是1,结合起来就是1天生成一个新文件。如果filePattern改成%d{yyyy-MM-dd HH}.gz,此时最小粒度为小时,则每一个小时生成一个文件。 --> <TimeBasedTriggeringPolicy/> <!-- 指定当文件体积大于size指定的值时,触发Rolling --> <SizeBasedTriggeringPolicy size="100 MB"/> </Policies> <!-- 指定最多保存的文件个数 --> <DefaultRolloverStrategy max="20"/> </RollingRandomAccessFile> <param name="Encoding" value="UTF-8" /> </Appenders> <Loggers> <!-- 3rdparty Loggers --> <logger name="org.springframework.core" level="info"> </logger> <logger name="org.springframework.beans" level="info"> </logger> <logger name="org.springframework.context" level="info"> </logger> <logger name="org.springframework.web" level="info"> </logger> <logger name="org.springframework.test.context.junit4.SpringJUnit4ClassRunner" level="info"> </logger> <!-- 下面的logger需要修改为你的项目根路径,如com.sd --> <logger name="com.stu" level="debug" includeLocation="true" additivity="false"> <appender-ref ref="ErrorLog"/> <appender-ref ref="Console"/> </logger> <root level="info" includeLocation="true"> <appender-ref ref="ErrorLog"/> <appender-ref ref="Console"/> </root> </Loggers> </Configuration>
三、在web.xml中配置log4j2的加载启动
<!-- log4j2-begin --> <listener> <listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class> </listener> <filter> <filter-name>log4jServletFilter</filter-name> <filter-class>org.apache.logging.log4j.web.Log4jServletFilter</filter-class> </filter> <filter-mapping> <filter-name>log4jServletFilter</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> <dispatcher>INCLUDE</dispatcher> <dispatcher>ERROR</dispatcher> </filter-mapping> <!-- log4j2-end -->注:加上上述配置后,就能在项目启动是加载log4j2
四、在Mybatis的配置文件中,加入上述配置
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration> <!-- 使用log4j2打印查询语句 --><settings> <setting name="logImpl" value="LOG4J2" /> </settings></configuration>
注:settings配置完毕后,即可实现SQL语句的打印!控制台打印如下结果:
2017-10-23 16:38:01,021 DEBUG (BaseJdbcLogger.java:145) - ==> Preparing: SELECT count(*) FROM t_user 2017-10-23 16:38:01,056 DEBUG (BaseJdbcLogger.java:145) - ==> Parameters: 2017-10-23 16:38:01,084 DEBUG (BaseJdbcLogger.java:145) - <== Total: 1
五、实现Mybatis官方提供的拦截器,用于记录SQL语句的执行时间
package com.stu.interceptor;import java.sql.Statement;import java.util.Properties;import org.apache.ibatis.executor.statement.StatementHandler;import org.apache.ibatis.plugin.Interceptor;import org.apache.ibatis.plugin.Intercepts;import org.apache.ibatis.plugin.Invocation;import org.apache.ibatis.plugin.Plugin;import org.apache.ibatis.plugin.Signature;import org.apache.ibatis.session.ResultHandler;/** * Sql执行时间记录拦截器 */@Intercepts({@Signature(type = StatementHandler.class, method = "query", args = {Statement.class, ResultHandler.class}), @Signature(type = StatementHandler.class, method = "update", args = {Statement.class}), @Signature(type = StatementHandler.class, method = "batch", args = { Statement.class })})public class SqlCostInterceptor implements Interceptor { @Override public Object intercept(Invocation invocation) throws Throwable { long startTime = System.currentTimeMillis(); try { return invocation.proceed(); } finally { long endTime = System.currentTimeMillis(); long sqlCost = endTime - startTime; System.out.println("执行耗时 : [" + sqlCost + "ms ] "); } } @Override public Object plugin(Object target) { return Plugin.wrap(target, this); } @Override public void setProperties(Properties properties) { } }注:Interceptor接口是Mybatis官方提供的拦截接口,创建一个类实现该接口并重写其三个方法并将该类配置在Mybatis的配置文件中,即可拦截SQL语句的执行过程
六、将手动编写的拦截器配置在Mybatis配置文件中:
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration> <!-- 使用log4j2打印查询语句 --><settings> <setting name="logImpl" value="LOG4J2" /> </settings><typeAliases><package name="com.stu.pojo" /></typeAliases><plugins><!-- 拦截器配置 --><plugin interceptor="com.stu.interceptor.SqlCostInterceptor" /></plugins></configuration>
七、测试SQL的控制台打印结果
2017-10-23 16:38:01,091 DEBUG (BaseJdbcLogger.java:145) - ==> Preparing: select id, username, password, state, isdel, add_time, money, left_money from t_user limit ?,? 2017-10-23 16:38:01,093 DEBUG (BaseJdbcLogger.java:145) - ==> Parameters: 0(Integer), 15(Integer)2017-10-23 16:38:01,128 DEBUG (BaseJdbcLogger.java:145) - <== Total: 15执行耗时 : [36ms ]
阅读全文
0 0
- log4j2打印Mybatis执行的SQL语句及SQL语句的执行时间
- log4j2.xml打印mybatis的sql语句
- mybatis打印出执行的sql语句
- mybatis控制台打印执行的sql语句
- Mybatis + log4j2 Debug 模式打印sql语句
- spring mvc + mybatis + LOG4J2 打印SQL语句
- MyBatis的配置及打印SQL语句
- mybatis的Sql语句打印
- mybatis 打印sql执行语句
- log4j.xml 简单配置 打印 mybatis 执行的 sql 语句
- mybatis如何在控制台打印执行的sql语句
- Mybatis在控制台打印执行的sql语句
- Mybatis在控制台打印执行的sql语句
- Mybatis在编译器中打印sql语句及执行后的结果
- 查看SQL语句的执行时间
- 查看SQL语句的执行时间
- 查看SQL语句的执行时间
- 查看SQL语句的执行时间
- 10. Regular Expression Matching
- 配置_eclipse:项目在myeclipse与eclipse之间迁移
- 9-const和volatile分析
- Coscos2d初学的一些知识点01
- 解决linux服务器CentOS(6和7版本),/etc/sysconfig/下没有iptables的问题
- log4j2打印Mybatis执行的SQL语句及SQL语句的执行时间
- Android 贝塞尔曲线自定义波浪
- 运用JDBC进行数据库编程
- eclipse 创建maven 项目示例
- hibernate时间比较
- zookeeper客户端读取子节点的信息
- 友元函数初探
- 【spring学习笔记三】aop思想介绍及实现原理
- vue.js-div滚动条隐藏但有滚动效果的实现