ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

深入解析:Spring boot中 限制 Mybatis SQL日志的大字段输出

深入解析:Spring boot中 限制 Mybatis SQL日志的大字段输出

由于现有的项目框架中,针对MyBatis的SQL日志,会完整的输出sql语句及参数内容。

存在对longtext、clob等大字段,在执行INSERT、UPDATA语句中,导致控制台输出问题:

  • 日志文件迅速膨胀
  • JVM内存异常

通过 LogbackLog4j2 的自定义 ConverterFilter,对 MyBatis 打印的 PreparedStatement 参数进行截断或脱敏。

可以直接通修改定日志级别,限制Debug级别

1、创建自定义转换器

import ch.qos.logback.classic.pattern.ClassicConverter;
import ch.qos.logback.classic.spi.ILoggingEvent;/***** @author xuancg* @date 2025/9/30*/
public class SqlParamMaskingConverter extends ClassicConverter {private static final int MAX_LENGTH = 400;private static final String MASK = "...[MASKED: too long to show]";@Overridepublic String convert(ILoggingEvent event) {String message = event.getFormattedMessage();// 匹配 PreparedStatement 的参数设置日志,如:? column1 = 'value'
        if (message.startsWith("==> Parameters:") || message.startsWith("Parameters:")) {return maskLongStrings(message);}return message;}private String maskLongStrings(String msg) {// 简单处理:对单引号包裹的长字符串进行截断if(msg.length() > MAX_LENGTH){return msg.substring(0, MAX_LENGTH) + MASK;}return msg;}
}

2、注册到 logback.xml

主要修改内容:

%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %maskedMsg%n

返回列表