springboot mybatis_plus 集成日志配置文件
笔者使用的mybatisplus的版本3.4.3.3,对应的mybatis的版本为3.5.7。在以前的项目中对于日志打印没发现对性能有多大影响,近期实现了一个大的数据量导出到Excel中(行数几十万,列数上百级别),发现每次打印出来的额sql语句返回的结果集太多了,几乎是刷屏状态,完全不能做分析使用。固对日志输出这块儿稍微看了一下,这里做下简单的分析:
配置mybatisplus日志输出分为很多种:
第一种,全量日志输出,包括查询语句、参数、返回结果集、总条数:
#控制台打印sql mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl 看源码不难发现debug和trace级别日志均设置为true
第二种为,不打印sql语句、参数、返回结果集、条数是
#控制台打印sql mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.nologging.NoLoggingImpl call-setters-on-nulls: true 看源码不难发现,debug和trace均设置为false
而实际业务中上面两种设置完全不能满足,第一种全量输出会让系统处于高io场景中对业务没利,第二种完全不输出则无法分析业务场景数据(比如异常、逻辑分析等)。实际上我们需要的是能输出sql语句,但是却不输出结果集的配置,固想到第三种设置方式。
第三种方式需要自己实现log接口,并设置debug和trace的级别分别为true和false
package com.yaodou.common.config; import org.apache.ibatis.logging.Log; /** * 创建人: * 创建时间:2022/3/17 23:27 * 类名: * 参数: * 返回值: * 类描述: */ public class SqlOutLogImpl implements Log { public SqlOutLogImpl(String clazz) { System.out.println("SqlOutLogImpl::"+clazz); } @Override public boolean isDebugEnabled() { return true; } @Override public boolean isTraceEnabled() { return false; } @Override public void error(String s, Throwable throwable) { System.err.println(s); throwable.printStackTrace(System.err); } @Override public void error(String s) { System.err.println("SqlOutLogImpl:error:"+s); } @Override public void debug(String s) { System.out.println("SqlOutLogImpl:debug:"+s); } @Override public void trace(String s) { System.out.println("SqlOutLogImpl:trace:"+s); } @Override public void warn(String s) { System.out.println("SqlOutLogImpl:warn:"+s); } } 配置文件中为:
#控制台打印sql mybatis-plus: configuration: log-impl: com.yaodou.common.config.SqlOutLogImpl call-setters-on-nulls: true 如上设置即可实现输出sql却不输出结果集效果。
