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

 更新时间:2022年08月31日 14:49:57   作者:logytar  
在学习mybatis的时候,如果用log4j2来协助查看调试信息,则会大大提高学习的效率,加快debug速度,下面这篇文章主要给大家介绍了关于mybatis log4j2打印sql+日志的相关资料,需要的朋友可以参考下

前言

将采用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

由于不是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");

总结

到此这篇关于mybatis log4j2打印sql日志的文章就介绍到这了,更多相关mybatis log4j2打印日志内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Red Hat 安装JDK与IntelliJ IDEA的详细过程

    Red Hat 安装JDK与IntelliJ IDEA的详细过程

    YUM是基于Red Hat的Linux发行版的一个强大而用户友好的包管理工具,这篇文章主要介绍了Red Hat安装JDK与IntelliJ IDEA,需要的朋友可以参考下
    2023-08-08
  • Spring框架中IoC容器与DI依赖注入教程

    Spring框架中IoC容器与DI依赖注入教程

    IOC也是Spring的核心之一了,之前学的时候是采用xml配置文件的方式去实现的,后来其中也多少穿插了几个注解,但是没有说完全采用注解实现。那么这篇文章就和大家分享一下,全部采用注解来实现IOC + DI
    2023-01-01
  • Java中的延迟队列DelayQueue详细解析

    Java中的延迟队列DelayQueue详细解析

    这篇文章主要介绍了Java中的延迟队列DelayQueue详细解析,JDK自身支持延迟队列的数据结构,其实类:java.util.concurrent.DelayQueue,<BR>我们通过阅读源码的方式理解该延迟队列类的实现过程,需要的朋友可以参考下
    2023-12-12
  • Java中toString()、String.valueOf、(String)强转区别

    Java中toString()、String.valueOf、(String)强转区别

    相信大家在日常开发中这三种方法用到的应该很多,本文主要介绍了Java中toString()、String.valueOf、(String)强转区别,感兴趣的可以了解一下
    2021-09-09
  • JVM Tomcat性能实战(推荐)

    JVM Tomcat性能实战(推荐)

    下面小编就为大家带来一篇JVM Tomcat性能实战(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-05-05
  • Java中的SpringAOP、代理模式、常用AspectJ注解详解

    Java中的SpringAOP、代理模式、常用AspectJ注解详解

    这篇文章主要介绍了Java中的SpringAOP、代理模式、常用AspectJ注解详解,Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务,例如审计和事务管理进行内聚性的开发,需要的朋友可以参考下
    2023-09-09
  • Mybatis 中的<![CDATA[ ]]>浅析

    Mybatis 中的<![CDATA[ ]]>浅析

    本文给大家解析使用<![CDATA[ ]]>解决xml文件不被转义的问题, 对mybatis 中的<![CDATA[ ]]>相关知识感兴趣的朋友一起看看吧
    2017-09-09
  • Android实现兼容的水波纹效果

    Android实现兼容的水波纹效果

    Android的水波纹效果只有高版本才有,我们希望自己的应用在低版本用低版本的阴影,而高版本用水波纹,这怎么做呢?下面一起来学习学习。
    2016-08-08
  • SpringBoot服务上实现接口限流的方法

    SpringBoot服务上实现接口限流的方法

    这篇文章主要介绍了SpringBoot服务上实现接口限流的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • java括号匹配问题介绍

    java括号匹配问题介绍

    大家好,本篇文章主要讲的是java括号匹配问题介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12

最新评论