mybatis log4j2打印sql+日志实例代码

作者:logytar 时间:2022-09-30 16:50:08 

前言

将采用slf+log4j2方式进行打印日志,以下用两种方式,一种基于maven的springboot2,一种jdk6,普通jar包的springmvc

基于maven的springboot

第一步、由于前阵子java8可对应的log4j漏洞问题,公司要求log4j升级到2.17.1,因此需要把springboot自带的log4j进行排除引入高版本。

<properties>
<log4j2.version>2.17.1</log4j2.version>
</properties>

<!--log4j漏洞升级-->
<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做了对邮件、手机号、身份证号敏感数据转码**

<?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接口包,写在*.properties,放置在resource下

#debug log 自己项目的包,写dao接口的位置
logging.level.com.company.pm.mapper=debug

重新启动即可,sql日志就会出来,如果想自己logger出来,用slf即可

Logger logger = LoggerFactory.getLogger(getClass());
logger.debug("6867868@qq.com");

第二种 jdk6,普通jar包的springmvc

spring3 + mybatis3

jdk6建议log4j版本为2.3.2(官方因漏洞推荐),引入以下个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

mybatis log4j2打印sql+日志实例代码

mybatis log4j2打印sql+日志实例代码

由于不是maven项目,只是普通的mvc结构,因此我在src下建了两个文件log4j2.xml(有些是resource,这个项目前期没有这个,反正最后打包后在class下面就是了)

 log4j2.xml,不知道,为啥在jdk6以及版本log4j2.3.2里面为何pattern不能写多个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有个坑点,我不知道为何log4j.properties与log4j.xml不能同时存在

测试类

Logger logger = LoggerFactory.getLogger(getClass());
logger.debug("6867868@qq.com");

来源:https://blog.csdn.net/qiumen/article/details/123182337

标签:mybatis,log4j2,打印日志
0
投稿

猜你喜欢

  • 深度理解Java访问修饰符

    2021-10-26 17:16:08
  • Java中高效判断数组中是否包含某个元素的几种方法

    2022-02-21 05:46:39
  • 在android中实现类似uc和墨迹天气的左右拖动效果

    2022-06-18 08:47:50
  • C++11中std::packaged_task的使用详解

    2022-03-12 20:08:23
  • Android开发之BottomSheetDialog组件的使用

    2021-12-02 19:01:27
  • Android WebView与JS交互全面详解(小结)

    2023-12-04 03:10:59
  • java中this的n种使用方法

    2023-12-23 13:13:23
  • Android 中SP与DP的区别实例详解

    2021-12-26 22:43:13
  • 解析JavaSE的继承和多态

    2023-11-24 16:13:48
  • SpringIOC容器Bean的作用域及生命周期实例

    2023-10-01 11:21:34
  • C# 基于NAudio实现对Wav音频文件剪切(限PCM格式)

    2022-08-31 09:55:18
  • C#控制台程序如何发布到服务器Linux上运行

    2022-07-17 05:57:52
  • Mybatis-Plus注入SQL原理分析

    2022-11-09 21:17:22
  • SpringBoot2.7 WebSecurityConfigurerAdapter类过期配置

    2022-09-23 00:27:32
  • Android ListView position详解及实例代码

    2023-10-29 03:33:15
  • SpringBoot浅析安全管理之OAuth2框架

    2022-10-12 17:17:04
  • java 获取当前时间的三种方法

    2022-10-11 21:54:04
  • java数据结构算法稀疏数组示例详解

    2021-09-30 11:47:28
  • java 创建线程的方法总结

    2023-02-25 20:20:30
  • Java经典面试题最全汇总208道(二)

    2023-11-09 08:13:39
  • asp之家 软件编程 m.aspxhome.com