笔者使用的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却不输出结果集效果。
原文链接:https://blog.csdn.net/goodlook0123/article/details/123563815