java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > log4j2打印mybatis的sql执行日志

使用log4j2打印mybatis的sql执行日志方式

作者:PacosonSWJTU

这篇文章主要介绍了使用log4j2打印mybatis的sql执行日志方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

log4j2打印mybatis的sql执行日志

maven配置jar包依赖 

如下:

<!-- 日志jar -->
		<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api -->
		<dependency>
		    <groupId>org.apache.logging.log4j</groupId>
		    <artifactId>log4j-api</artifactId>
		    <version>2.11.1</version>
		</dependency>
		<dependency>
		    <groupId>org.apache.logging.log4j</groupId>
		    <artifactId>log4j-core</artifactId>
		    <version>2.11.1</version>
		</dependency>
		<dependency>
		    <groupId>org.apache.logging.log4j</groupId>
		    <artifactId>log4j-web</artifactId>
		    <version>2.11.1</version>
		</dependency>
		<dependency>
		    <groupId>org.apache.logging.log4j</groupId>
		    <artifactId>log4j-slf4j-impl</artifactId>
		    <version>2.11.1</version>
		</dependency>
	</dependencies>

配置log4j2.xml文件

内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
  <Appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %l %msg%n"/>
    </Console>
  </Appenders>
  <Loggers>
    <Root level="error">
      <AppenderRef ref="Console"/>
    </Root>
    <Logger name="com.swjtu.crud.dao" level="DEBUG or TRACE" additivity="false">
      <AppenderRef ref="Console"/>
    </Logger>
  </Loggers>
</Configuration>

Logger 标签 配置了需要打印日志的mapper(Mapper类或mapper XML 文件所在包)

Logger标签中的 level属性取值为 DEBUG 或者 TRACE,(取其一)

mybatis配置文件

mybatis-config.xml中设置日志的工具类 

如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<properties resource="dbconfig.properties">
	</properties>
	<settings>
  	    <!-- 驼峰命名规则 -->
  		<setting name="mapUnderscoreToCamelCase" value="true"/>
  		<!-- 配置日志工具 -->
		<setting name="logImpl" value="LOG4J2" />
  	</settings>
  	<typeAliases>
	  <package name="com.swjtu.crud.bean" />
	</typeAliases>
  	<plugins>
  		<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
  	</plugins>
	<environments default="development">
		<!-- 开发环境 -->
		<environment id="development">
			<transactionManager type="JDBC"/>
			<dataSource type="POOLED">
				<property name="driver" value="${jdbc.driver}"/>
				<property name="url" value="${jdbc.url}"/>
				<property name="username" value="${jdbc.username}"/>
				<property name="password" value="${jdbc.password}"/>
			</dataSource>
		</environment>
	</environments>
	<mappers>
		<mapper resource="com\swjtu\crud\dao\dept.mapper.xml"/>
	</mappers>
</configuration>

日志打印效果

20:35:28.742 [main] DEBUG org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:181) ==>  Preparing: SELECT dept_id AS DEPT_ID , dept_name AS DEPT_NAME FROM dept_tbl WHERE rcrd_id IN ( ? , ? , ? ) 
20:35:28.786 [main] DEBUG org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:181) ==> Parameters: 1(String), 2(String), 3(String)
20:35:28.807 [main] DEBUG org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:181) <==      Total: 3

打印sql为:

<!-- 查询部门列表 --> 
  <select id="getDeptList" resultType="map"> 
  	SELECT dept_id AS DEPT_ID 
  	       , dept_name AS DEPT_NAME
  	  FROM dept_tbl 
  	 WHERE rcrd_id IN 
  	      (
  	 	    <foreach collection="LIST" item="item" separator=", ">
  	 	      #{item} 
  	        </foreach> 
 	      ) 
  </select>

配置Log4j,使得MyBatis打印出SQL语句

环境参数

配置步骤

一、设置MyBatis的Setting(非必须,不同环境下,可能不需要该设置)。

在“src/main/java/resources”目录下,创建mybatis-config.xml文件,并且输入下列内容。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
    PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <settings>
        <setting name="lazyLoadingEnabled" value="false" />
        <setting name="logImpl" value="LOG4J" />
    </settings>
</configuration>

二、配置log4j的配置文件。

不同的项目中,log4j的配置文件的格式可能不同,在一些项目中,log4j的配置文件是XML格式的,比如log4j.xml;在另一些项目中,log4j的配置文件是properties格式的,比如log4j.properties。

备注:properties格式文件的配置一般只在老的项目中存在,新的互联网类项目,一般都是XML格式。

1、对于properties格式文件的配置。

###############Log4j 4 SQL Output start#################
log4j.logger.com.xxx.mydao=DEBUG
log4j.logger.com.springframework=DEBUG
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.java.sql.ResultSet=DEBUG
log4j.logger.org.apache.ibatis.logging.commons.JakartaCommonsLoggingImpl=DEBUG
log4j.logger.java.sql=DEBUG,CONSOLE 
###############Log4j 4 SQL Output end###################

2、对于xml格式文件的配置。

<loggers>
    <!-- name可以指定包名或具体的类;additivity如果指定true,则root logger也会生效,相同日志会输出两次;false,则只有当前日志文件输出 -->
    <!-- 借据插入接口日志 -->
    <logger level="info" name="insertCreditBill" additivity="false">
        <appender-ref ref="insertCreditBillLog" />
    </logger>                                
    <!-- 下面是打印通过log4j2打印出mybatis语句的配置-->
    <logger name="com.xxx.mydao">
        <level>DEBUG</level>
    </logger>
    <logger name="com.springframework">
        <level>DEBUG</level>
    </logger>                        
    <logger name="com.ibatis" additivity="true"> 
        <level>DEBUG</level> 
    </logger>
    <logger name="com.ibatis.common.jdbc.SimpleDataSource" additivity="true"> 
        <level>DEBUG</level> 
    </logger>        
    <logger name="com.ibatis.common.jdbc.ScriptRunner" additivity="true"> 
        <level>DEBUG</level>
    </logger>    
    <logger name="com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate" additivity="true"> 
        <level>DEBUG</level>
    </logger>                             
    <logger name="Java.sql.Connection" additivity="true">  
        <level>DEBUG</level>
    </logger> 
    <logger name="java.sql.Statement" additivity="true"> 
        <level>DEBUG</level>
    </logger> 
    <logger name="java.sql.PreparedStatement" additivity="true"> 
        <level>DEBUG</level>
    </logger> 
    <logger name="java.sql.ResultSet" additivity="true"> 
        <level>DEBUG</level>
    </logger>     
    <logger name="org.apache.ibatis.logging.commons.JakartaCommonsLoggingImpl" additivity="true"> 
        <level>DEBUG</level>
    </logger>                     
    <!-- root logger,任何其它的logger最终都相当于继承自 root logger -->
    <root level="INFO">
        <appenderRef ref="Console" />
        <appenderRef ref="FileLog"></appenderRef>
    </root>
</loggers>

说明:

上述配置中,“com.xxx.mydao”为自己项目中MyBatis的所有的mapper和xml文件所在的包名字。

至此,log4j的打印SQL语句的配置完成。

3、XML格式配置的精简版本

<loggers>                            
    <!-- 下面是打印通过log4j2打印出mybatis语句的配置-->
    <logger name="com.xxx.mydao">
        <level>DEBUG</level>
    </logger>
    <!-- root logger,任何其它的logger最终都相当于继承自 root logger -->
    <root level="INFO">
        <appenderRef ref="Console" />
        <appenderRef ref="FileLog"></appenderRef>
    </root>
</loggers>

说明:  

在开发中,需要配置让哪个包下的程序打印出SQL,则仅仅只用配置那一个包名就成。

上述配置中,“com.xxx.mydao”为自己项目中MyBatis的mapper和xml文件所在的包名字,因此,精简版中,仅仅配置了这个包的内容

拓展

“细粒度”控制:Log4j打印出MyBatis中仅仅单个Mapper的配置。

<!-- 下面是通过配置log4j2,仅仅打印出单个mapper的SQL语句的配置-->
<logger name="com.beebank.dao.iface.UserMapper">
    <level>DEBUG</level>
</logger>

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文