mybatis?log4j2打印sql+日志實(shí)例代碼
前言
將采用slf+log4j2方式進(jìn)行打印日志,以下用兩種方式,一種基于maven的springboot2,一種jdk6,普通jar包的springmvc
基于maven的springboot
第一步、由于前陣子java8可對(duì)應(yīng)的log4j漏洞問(wèn)題,公司要求log4j升級(jí)到2.17.1,因此需要把springboot自帶的log4j進(jìn)行排除引入高版本。
<properties> <log4j2.version>2.17.1</log4j2.version> </properties> <!--log4j漏洞升級(jí)--> <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-slf4j-impl</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.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> <exclusions> <exclusion> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> </exclusion> <exclusion> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> </exclusion> <exclusion> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> </exclusion> </exclusions> </dependency>
第二步 log4j.xml
以下patternLayout做了對(duì)郵件、手機(jī)號(hào)、身份證號(hào)敏感數(shù)據(jù)轉(zhuǎn)碼**
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="ERROR"> <Appenders> <Console name="console" target="SYSTEM_OUT"> <PatternLayout> <!-- <pattern>%d{ISO8601}|%level|%thread|%c{1.}|%L|%msg%n</pattern>--> <pattern><![CDATA[%d{ISO8601}|%level|%thread|%c|%L|%replace{%replace{%replace{%msg}{(^|\D)([\d]{12})(\d{3}|\d{6}|\d{5}(\d|X|x))(\D|$)}{$1$2******$5}}{(^|\D)(1([358][0-9]|4[579]|66|7[0135678]|9[89])([0-9]{4})([0-9]{4}))(\D|$)}{$11$3****$5$6}}{(([A-Za-z0-9-_.]{1,3})([A-Za-z0-9-_.]*)(@[a-zA-Z0-9-_.]+(\.[a-zA-Z-_.]+)+))}{$2***$4}%n]]></pattern> </PatternLayout> </Console> <RollingFile name="file" filePattern="/qhapp/applogs/imeeting/imeeting_business_%d{yyyyMMdd}_%i.log" immediateFlush="true"> <PatternLayout> <pattern>%d{ISO8601}|%level|%thread|%c{1.}|%L|%msg%n</pattern> </PatternLayout> <Policies> <TimeBasedTriggeringPolicy modulate="true" interval="1"/> <SizeBasedTriggeringPolicy size="10 MB"/> </Policies> </RollingFile> </Appenders> <Loggers> <Root level="INFO"> <AppenderRef ref="console"/> </Root> <Logger name="org.mybatis" level="INFO" additivity="false"> <AppenderRef ref="console"/> </Logger> <Logger name="org.springframework" level="INFO" additivity="false"> <AppenderRef ref="console"/> </Logger> <Logger name="com.company.booster" level="INFO" additivity="false"> <AppenderRef ref="console"/> </Logger> </Loggers> </Configuration>
第三步 輸出sql的mapper接口包,寫(xiě)在*.properties,放置在resource下
#debug log 自己項(xiàng)目的包,寫(xiě)dao接口的位置 logging.level.com.company.pm.mapper=debug
重新啟動(dòng)即可,sql日志就會(huì)出來(lái),如果想自己logger出來(lái),用slf即可
Logger logger = LoggerFactory.getLogger(getClass()); logger.debug("6867868@qq.com");
第二種 jdk6,普通jar包的springmvc
spring3 + mybatis3
jdk6建議log4j版本為2.3.2(官方因漏洞推薦),引入以下個(gè)jar包
log4j-slf4j-impl-2.3.2.jar、log4j-core-2.3.2.jar、log4j-api-2.3.2.jar、slf-api-1.7.25.jar、log4j-slf-impl-2.3.2.jar
由于不是maven項(xiàng)目,只是普通的mvc結(jié)構(gòu),因此我在src下建了兩個(gè)文件log4j2.xml(有些是resource,這個(gè)項(xiàng)目前期沒(méi)有這個(gè),反正最后打包后在class下面就是了)
log4j2.xml,不知道,為啥在jdk6以及版本log4j2.3.2里面為何pattern不能寫(xiě)多個(gè)replace,因此我只排除了郵箱敏感信息
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="ERROR"> <Appenders> <Console name="console" target="SYSTEM_OUT"> <PatternLayout> <pattern><![CDATA[%d{ISO8601}|%level|%thread|%c|%L|%replace{%msg}{(([A-Za-z0-9-_.]{1,3})([A-Za-z0-9-_.]*)(@[a-zA-Z0-9-_.]+(\.[a-zA-Z-_.]+)+))}{$2***$4}%n]]></pattern> <!-- <pattern><![CDATA[%d{ISO8601}|%level|%thread|%c|%L|%replace{%replace{%replace{%msg}{(^|\D)([\d]{12})(\d{3}|\d{6}|\d{5}(\d|X|x))(\D|$)}{$1$2******$5}}{(^|\D)(1([358][0-9]|4[579]|66|7[0135678]|9[89])([0-9]{4})([0-9]{4}))(\D|$)}{$11$3****$5$6}}{(([A-Za-z0-9-_.]{1,3})([A-Za-z0-9-_.]*)(@[a-zA-Z0-9-_.]+(\.[a-zA-Z-_.]+)+))}{$2***$4}%n]]></pattern>--> </PatternLayout> </Console> </Appenders> <Loggers> <Root level="INFO"> <AppenderRef ref="console"/> </Root> <Logger name="com.xxx自己的包.dao" level="DEBUG" additivity="false"> <AppenderRef ref="console"/> </Logger> <Logger name="org.mybatis" level="DEBUG" additivity="false"> <AppenderRef ref="console"/> </Logger> <Logger name="org.apache.ibatis" level="DEBUG" additivity="false"> <AppenderRef ref="console"/> </Logger> <Logger name="org.springframework" level="INFO" additivity="false"> <AppenderRef ref="console"/> </Logger> <Logger name="com.xxx自己的包" level="INFO" additivity="false"> <AppenderRef ref="console"/> </Logger> </Loggers> </Configuration>
mybatis-config.xml
<!-- 配置SqlSessionFactoryBean --> <bean class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="configLocation" value="classpath:configuration/mybatis-config.xml" /> ..... </bean>
application-context.cml
<!-- 配置SqlSessionFactoryBean --> <bean class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="configLocation" value="classpath:configuration/mybatis-config.xml" /> ..... </bean>
這里jdk6 slf+ log4j2有個(gè)坑點(diǎn),我不知道為何log4j.properties與log4j.xml不能同時(shí)存在
測(cè)試類(lèi)
Logger logger = LoggerFactory.getLogger(getClass()); logger.debug("6867868@qq.com");
總結(jié)
到此這篇關(guān)于mybatis log4j2打印sql日志的文章就介紹到這了,更多相關(guān)mybatis log4j2打印日志內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java中String類(lèi)常用方法總結(jié)詳解
String類(lèi)是一個(gè)很常用的類(lèi),是Java語(yǔ)言的核心類(lèi),用來(lái)保存代碼中的字符串常量的,并且封裝了很多操作字符串的方法。本文為大家總結(jié)了一些String類(lèi)常用方法的使用,感興趣的可以了解一下2022-08-08java中Class類(lèi)的基礎(chǔ)知識(shí)點(diǎn)及實(shí)例
在本篇文章里小編給大家分享了關(guān)于java中Class類(lèi)的基礎(chǔ)知識(shí)點(diǎn)及實(shí)例內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。2021-05-05手動(dòng)構(gòu)建springBoot啟動(dòng)器過(guò)程圖解
這篇文章主要介紹了手動(dòng)構(gòu)建springBoot啟動(dòng)器過(guò)程圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04java基于線(xiàn)程池和反射機(jī)制實(shí)現(xiàn)定時(shí)任務(wù)完整實(shí)例
這篇文章主要介紹了java基于線(xiàn)程池和反射機(jī)制實(shí)現(xiàn)定時(shí)任務(wù)的方法,以完整實(shí)例形式較為詳細(xì)的分析了Java定時(shí)任務(wù)的功能原理與實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11Mybatis如何實(shí)現(xiàn)@Select等注解動(dòng)態(tài)組合SQL語(yǔ)句
這篇文章主要介紹了Mybatis如何實(shí)現(xiàn)@Select等注解動(dòng)態(tài)組合SQL語(yǔ)句,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07SpringBoot整合BCrypt實(shí)現(xiàn)密碼加密
這篇文章主要為大家詳細(xì)介紹了SpringBoot整合BCrypt進(jìn)行密碼加密,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11淺談Java自定義類(lèi)加載器及JVM自帶的類(lèi)加載器之間的交互關(guān)系
這篇文章主要介紹了淺談Java自定義類(lèi)加載器及JVM自帶的類(lèi)加載器之間的交互關(guān)系,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-02-02