当前位置: 首页 > news >正文

Spring Boot + MyBatis日志前缀清除方法

在 Spring Boot 结合 MyBatis 的应用中,清空日志前缀(如 ==> <== 等)需要通过 自定义 MyBatis 的日志实现 或 修改日志模板 来实现。以下是两种常用方法:


方法 1:自定义 MyBatis 日志实现(推荐)

通过继承 MyBatis 的日志适配器,重写日志输出逻辑以移除前缀。

步骤:
  1. 创建自定义日志类
    新建一个类,继承自 org.apache.ibatis.logging.Log 并覆盖日志方法:

    java

    复制

    下载

    import org.apache.ibatis.logging.Log;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;public class NoPrefixMyBatisLogger implements Log {private final Logger logger;public NoPrefixMyBatisLogger(String clazz) {this.logger = LoggerFactory.getLogger(clazz);}@Overridepublic boolean isDebugEnabled() {return logger.isDebugEnabled();}@Overridepublic boolean isTraceEnabled() {return logger.isTraceEnabled();}@Overridepublic void error(String s, Throwable e) {logger.error(s, e);}@Overridepublic void error(String s) {logger.error(s);}@Overridepublic void debug(String s) {// 直接输出原始 SQL,移除前缀 "==> "logger.debug(s.replaceAll("^==>\\s+", ""));}@Overridepublic void trace(String s) {// 直接输出结果,移除前缀 "<== "logger.trace(s.replaceAll("^<==\\s+", ""));}@Overridepublic void warn(String s) {logger.warn(s);}
    }
  2. 创建日志工厂类
    实现 org.apache.ibatis.logging.LogFactory

    java

    复制

    下载

    import org.apache.ibatis.logging.Log;
    import org.apache.ibatis.logging.LogFactory;public class NoPrefixLogFactory implements LogFactory {@Overridepublic Log getLog(Class<?> clazz) {return new NoPrefixMyBatisLogger(clazz.getName());}
    }
  3. 在 application.yml 中指定日志工厂
    配置 MyBatis 使用自定义的日志工厂:

    yaml

    复制

    下载

    mybatis:configuration:log-impl: com.yourpackage.NoPrefixLogFactory  # 替换为你的包路径

方法 2:通过日志框架过滤前缀(以 Logback 为例)

修改日志配置文件,使用正则过滤掉前缀。

步骤:
  1. 修改 logback-spring.xml 文件
    在日志模板中使用 replace 函数移除前缀:

    xml

    复制

    下载

    运行

    <configuration><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><encoder><!-- 关键:使用 replace 过滤前缀 --><pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger{36} - %msg%n</pattern><charset>UTF-8</charset></encoder></appender><!-- 针对 MyBatis 的 Logger 单独处理 --><logger name="org.apache.ibatis" level="DEBUG"><appender-ref ref="CONSOLE" /></logger><root level="INFO"><appender-ref ref="CONSOLE" /></root>
    </configuration>
  2. 使用正则替换日志内容
    在 pattern 中无法直接替换,需结合自定义 Layout(较复杂)。更简单的方式是直接修改方法 1 中的日志输出。


验证结果

配置后执行 SQL,日志将不再显示前缀:

plaintext

复制

下载

2023-10-01 12:00:00 DEBUG [main] mapper.UserMapper.selectUser - Preparing: SELECT * FROM user WHERE id = ? 
2023-10-01 12:00:00 DEBUG [main] mapper.UserMapper.selectUser - Parameters: 1(Integer)
2023-10-01 12:00:00 DEBUG [main] mapper.UserMapper.selectUser - Total: 1

注意事项

  1. MyBatis 原生前缀来源
    前缀 ==> 和 <== 是 MyBatis 在 Log 实现中硬编码添加的(见 BaseJdbcLogger 类),无法通过配置直接关闭,必须通过自定义日志实现覆盖。

  2. 日志级别
    确保 MyBatis 的日志级别为 DEBUG(在 application.yml 中配置):

    yaml

    复制

    下载

    logging:level:com.yourpackage.mapper: DEBUG  # Mapper 接口所在包
  3. 性能影响
    方法 1 中的正则替换 s.replaceAll(...) 可能轻微影响性能,可在高并发场景下优化为字符串截取。

选择适合你项目的方式即可彻底移除日志前缀。

相关文章:

  • IDEA的git提交代码提交失败,有错误0 个文件已提交,1 个文件提交失败:
  • DEM 地形分析与水文建模:基于 ArcGIS 的流域特征提取
  • 矩阵批量剪辑源码开发,OEM贴牌
  • Spring Boot 整合 Security 权限控制中的常见陷阱
  • 每日算法 -【Swift 算法】实现有效括号匹配算法
  • SpringBoot前后台交互 -- 登录功能实现(拦截器+异常捕获器)
  • SpringCloud系列 - Nacos 配置中心(二)
  • 美食推荐系统微信小程序
  • 咖啡豆缺陷检测:用YOLOv8+TensorFlow实现工业级质检系统
  • 力扣HOT100之贪心算法:45. 跳跃游戏 II
  • 3 Studying《深入理解Android卷(邓凡平)》2
  • 考试中关于机动车安全技术检验标准(如 GB 7258、GB 21861 等)的考核重点有哪些?
  • 物联网配置记录
  • 鸿蒙开发-封装一个顶部标题栏
  • FastAPI系列20:fastapi-amis-admin,即开即用的后台框架(2)
  • BUG调试案例十四:TL431/TL432电路发热问题案例
  • SLAM3R:基于单目视频的实时密集3D场景重建
  • UE5 学习系列(六)导入资产包
  • Pandas:让数据起舞的Python魔法手册
  • SQL进阶之旅 Day 25:高并发环境下的SQL优化
  • 长沙市做网站公司/重庆seo技术分享
  • 2019销售网站开发与设计现状/精品成品网站入口
  • 响应式网站都有哪些/产品软文是什么意思
  • 做oa好 还是做网站好/百度账号客服人工电话
  • 徐水区住房和城乡建设局网站/最近新闻事件
  • 怎么样做网站编程/苏州关键词优化软件