使用log4j2打印mybatis的sql執(zhí)行日志方式
log4j2打印mybatis的sql執(zhí)行日志
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文件
內(nèi)容如下:
<?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 標(biāo)簽 配置了需要打印日志的mapper(Mapper類或mapper XML 文件所在包)
Logger標(biāo)簽中的 level屬性取值為 DEBUG 或者 TRACE,(取其一)
mybatis配置文件
mybatis-config.xml中設(shè)置日志的工具類
如下:
<?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> <!-- 駝峰命名規(guī)則 --> <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"> <!-- 開(kāi)發(fā)環(huán)境 --> <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語(yǔ)句
環(huán)境參數(shù)
- JDK:jdk1.8.0_25
- IDE:Eclipse Luna Servie Release 1
- 框架:Spring 4.1.5 + SpringMVC 4.1.5 + MyBatis 3.2.2
配置步驟
一、設(shè)置MyBatis的Setting(非必須,不同環(huán)境下,可能不需要該設(shè)置)。
在“src/main/java/resources”目錄下,創(chuàng)建mybatis-config.xml文件,并且輸入下列內(nèi)容。
<?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的配置文件。
不同的項(xiàng)目中,log4j的配置文件的格式可能不同,在一些項(xiàng)目中,log4j的配置文件是XML格式的,比如log4j.xml;在另一些項(xiàng)目中,log4j的配置文件是properties格式的,比如log4j.properties。
備注:properties格式文件的配置一般只在老的項(xiàng)目中存在,新的互聯(lián)網(wǎng)類項(xiàng)目,一般都是XML格式。
1、對(duì)于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、對(duì)于xml格式文件的配置。
<loggers> ? ? <!-- name可以指定包名或具體的類;additivity如果指定true,則root logger也會(huì)生效,相同日志會(huì)輸出兩次;false,則只有當(dāng)前日志文件輸出 --> ? ? <!-- 借據(jù)插入接口日志 --> ? ? <logger level="info" name="insertCreditBill" additivity="false"> ? ? ? ? <appender-ref ref="insertCreditBillLog" /> ? ? </logger> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <!-- 下面是打印通過(guò)log4j2打印出mybatis語(yǔ)句的配置--> ? ? <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最終都相當(dāng)于繼承自 root logger --> ? ? <root level="INFO"> ? ? ? ? <appenderRef ref="Console" /> ? ? ? ? <appenderRef ref="FileLog"></appenderRef> ? ? </root> </loggers>
說(shuō)明:
上述配置中,“com.xxx.mydao”為自己項(xiàng)目中MyBatis的所有的mapper和xml文件所在的包名字。
至此,log4j的打印SQL語(yǔ)句的配置完成。
3、XML格式配置的精簡(jiǎn)版本
<loggers> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <!-- 下面是打印通過(guò)log4j2打印出mybatis語(yǔ)句的配置--> ? ? <logger name="com.xxx.mydao"> ? ? ? ? <level>DEBUG</level> ? ? </logger> ? ? <!-- root logger,任何其它的logger最終都相當(dāng)于繼承自 root logger --> ? ? <root level="INFO"> ? ? ? ? <appenderRef ref="Console" /> ? ? ? ? <appenderRef ref="FileLog"></appenderRef> ? ? </root> </loggers>
說(shuō)明:
在開(kāi)發(fā)中,需要配置讓哪個(gè)包下的程序打印出SQL,則僅僅只用配置那一個(gè)包名就成。
上述配置中,“com.xxx.mydao”為自己項(xiàng)目中MyBatis的mapper和xml文件所在的包名字,因此,精簡(jiǎn)版中,僅僅配置了這個(gè)包的內(nèi)容
拓展
“細(xì)粒度”控制:Log4j打印出MyBatis中僅僅單個(gè)Mapper的配置。
<!-- 下面是通過(guò)配置log4j2,僅僅打印出單個(gè)mapper的SQL語(yǔ)句的配置--> <logger name="com.beebank.dao.iface.UserMapper"> ? ? <level>DEBUG</level> </logger>
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot+Vue項(xiàng)目打包部署完整步驟教程
這篇文章主要介紹了SpringBoot+Vue項(xiàng)目打包部署的相關(guān)資料,包括Vue項(xiàng)目的打包設(shè)置、SpringBoot的配置修改、跨域問(wèn)題處理、使用Nginx配置反向代理以及最終的項(xiàng)目啟動(dòng),教程假定開(kāi)發(fā)者已具備完整的前后端分離項(xiàng)目和配置好環(huán)境的服務(wù)器,需要的朋友可以參考下2024-10-10springboot如何使用thymeleaf模板訪問(wèn)html頁(yè)面
springboot中推薦使用thymeleaf模板,使用html作為頁(yè)面展示。那么如何通過(guò)Controller來(lái)訪問(wèn)來(lái)訪問(wèn)html頁(yè)面呢?下面通過(guò)本文給大家詳細(xì)介紹,感興趣的朋友跟隨腳本之家小編一起看看吧2018-05-05【面試】Spring事務(wù)面試考點(diǎn)吐血整理(建議珍藏)
本文是小編給大家收藏整理的Spring事務(wù)面試考點(diǎn),非常不錯(cuò),值得收藏,感興趣的朋友參考下吧2019-04-04Java實(shí)現(xiàn)在線語(yǔ)音識(shí)別
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)在線語(yǔ)音識(shí)別功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-08-08Kafka消費(fèi)客戶端協(xié)調(diào)器GroupCoordinator詳解
這篇文章主要為大家介紹了Kafka消費(fèi)客戶端協(xié)調(diào)器GroupCoordinator使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10MyBatisPlus分頁(yè)時(shí)排序的實(shí)現(xiàn)
本文主要介紹了MyBatisPlus分頁(yè)時(shí)排序的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03Java?SpringTask定時(shí)自動(dòng)化處理方法
這篇文章主要介紹了Java?SpringTask定時(shí)自動(dòng)化處理,通過(guò)自動(dòng)化,不僅可以提高工作效率和準(zhǔn)確性,還可以釋放人力資源以專注于更高價(jià)值的工作,需要的朋友可以參考下2024-08-08