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

目录
  • 前言
  • 基于maven的springboot
  • 第二种 jdk6,普通jar包的springmvc
  • 总结

前言

将采用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打印日志内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • log4j2日志异步打印(实例讲解)

    log4j2支持日志的异步打印,日志异步输出的好处在于,使用单独的进程来执行日志打印的功能,可以提高日志执行效率,减少日志功能对正常业务的影响. 异步日志在程序的classpath需要加载disruptor-3.0.0.jar或者更高的版本. Asynchronous Loggers是一个新增特性在Log4j 2 ,可以实现完全异步也可以和同步混合使用,还可以只异步化Appender,以提升系统性能,官方数据显示混合没有完全异步化效果好. 1,完全异步模式: 这种异步日志方式,不需要修改原来的配

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

    目录 前言 基于maven的springboot 第二种 jdk6,普通jar包的springmvc 总结 前言 将采用slf+log4j2方式进行打印日志,以下用两种方式,一种基于maven的springboot2,一种jdk6,普通jar包的springmvc 基于maven的springboot 第一步.由于前阵子java8可对应的log4j漏洞问题,公司要求log4j升级到2.17.1,因此需要把springboot自带的log4j进行排除引入高版本. <properties> <

  • Mybatis 实现打印sql语句的代码

    mybatis本身没有提供日志的实现,引入的是第三方组件.mybatis支持多个第三方日志插件,优先级由低到高为slf4J.commonsLoging.Log4J2.Log4J和JdkLog. mybatis中有一个LogFactory,获取log的工厂类,在工程类中可以回去对应的日志实现.分析工程类,可以发现mybatis如何来选择log public static Log getLog(String logger) { try { return logConstructor.newInsta

  • springmvc+mybatis 做分页sql 语句实例代码

    废话不多说了,直接给大家贴代码了,具体代码如下所示: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="s

  • Mybatis控制台打印Sql语句的实现代码

    MyBatis简介 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录. 下面看下Mybatis控制台打印Sql语句 1.首先将ibatis log4j运行级别调到DEBUG可以在控制台打印出ibatis运行的sql语

  • springboot+mybatis配置控制台打印sql日志的方法

    此处项目环境为简单的springboot+mybatis环境.可查看到上一篇文章搭建的简单springboot+mybatis的项目 想要控制台打印sql日志. 只需要在resources目录下添加logback.xml文件即可 logback内容如下.直接复制即可 <?xml version="1.0" encoding="UTF-8"?> <configuration debug="false"> <!--定义日

  • mybatis plus 开启sql日志打印的方法小结

    mybatis-plus简介: Mybatis-Plus(简称MP)是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发.提高效率而生.这是官方给的定义,关于mybatis-plus的更多介绍及特性,可以参考mybatis-plus官网.那么它是怎么增强的呢?其实就是它已经封装好了一些crud方法,我们不需要再写xml了,直接调用这些方法就行,就类似于JPA. 下面看下mybatis plus 开启sql日志打印的两种方法. 方法一: mybatis-pl

  • Mybaits 实现打印sql语句的代码

    mybatis本身没有提供日志的实现,引入的是第三方组件.mybatis支持多个第三方日志插件,优先级由低到高为slf4J.commonsLoging.Log4J2.Log4J和JdkLog. mybatis中有一个LogFactory,获取log的工厂类,在工程类中可以回去对应的日志实现.分析工程类,可以发现mybatis如何来选择log public static Log getLog(String logger) { try { return logConstructor.newInsta

  • mybatis 插件: 打印 sql 及其执行时间实现方法

    Plugins 摘一段来自MyBatis官方文档的文字. MyBatis允许你在某一点拦截已映射语句执行的调用.默认情况下,MyBatis允许使用插件来拦截方法调用: Executor(update.query.flushStatements.commint.rollback.getTransaction.close.isClosed) ParameterHandler(getParameterObject.setParameters) ResultSetHandler(handleResult

  • MyBatis动态创建表的实例代码

    项目中业务需求的不同,有时候我们需要动态操作数据表(如:动态建表.操作表字段等).常见的我们会把日志.设备实时位置信息等存入数据表,并且以一定时间段生成一个表来存储,log_201806.log_201807等.在这里我们用MyBatis实现,会用到动态SQL. 动态SQL是Mybatis的强大特性之一,MyBatis在对sql语句进行预编译之前,会对sql进行动态解析,解析为一个BoundSql对象,也是在此对动态sql进行处理. 在动态sql解析过程中,#{ }与${ }的效果是不一样的:

  • mybatis实现读取树结构数据实例代码

    mybatis实现读取树结构数据详细介绍如下所示: 表结构 CREATE TABLE `lscrm_function_privilege` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '编号', `create_id` varchar(30) NOT NULL DEFAULT 'sys', `update_id` varchar(30) NOT NULL DEFAULT 'sys', `create_time` timestam

随机推荐