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(...) 可能轻微影响性能,可在高并发场景下优化为字符串截取。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/diannao/86777.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【消息队列】——如何实现消息保序

目录 一、哪些场景需要消息保序?二、如何实现消息保序?三、保序消息的常见问题和应对策略3.1、重复消息3.2、节点故障3.3、分区扩容四、小结本文来源:极客时间vip课程笔记 一、哪些场景需要消息保序? 消息保序问题指的是,在通过消息中间件传递消息过程中,我们希望消费者收…

Transformer模型详解

Transformer Transformer真是个细节满满的框架呢&#xff0c;大三读到根本不敢看&#xff0c;考研复试前看了看&#xff0c;以为懂了其实差得还远&#xff0c;两个多月前看了&#xff0c;还是一知半解&#xff0c;如今终于经过细细分析&#xff0c;算是知道了Transformer的基本…

火山引擎发布豆包大模型 1.6 与视频生成模型 Seedance 1.0 pro

6 月 11 日&#xff0c;在火山引擎 FORCE 原动力大会上&#xff0c;字节跳动旗下火山引擎正式发布豆包大模型 1.6、豆包・视频生成模型 Seedance 1.0 pro、豆包・语音播客模型&#xff0c;豆包・实时语音模型也在火山引擎全量上线&#xff0c;豆包大模型家族已成为拥有全模态、…

PH热榜 | 2025-06-12

1. Atlas 标语&#xff1a;几秒钟内了解定价情况 介绍&#xff1a;获取即插即用的定价页面&#xff0c;让你轻松赚钱&#xff0c;不再辛苦操劳。 产品网站&#xff1a; 立即访问 Product Hunt&#xff1a; View on Product Hunt 关键词&#xff1a;Atlas, 定价快速, 插件式…

ChatGPT革命升级!o3-pro模型重磅发布:开启AI推理新纪元

2025年6月10日&#xff0c;OpenAI以一场低调而震撼的发布&#xff0c;正式推出了新一代推理模型o3-pro&#xff0c;这标志着人工智能在复杂问题解决领域的重大突破。作为ChatGPT Pro和Team订阅用户的专属工具&#xff0c;o3-pro不仅重新定义了AI的可靠性标准&#xff0c;更以其…

NVIDIA Isaac GR00T N1.5 适用于 LeRobot SO-101 机械臂

系列文章目录 目录 系列文章目录 前言 一、简介 二、详细教程 2.1 数据集准备 2.1.1 创建或下载您的数据集 2.1.2 配置模态文件 2.2 模型微调 2.3 开环评估 2.4 部署 &#x1f389; 快乐编程&#xff01;&#x1f4bb;&#x1f6e0;️ 立即开始&#xff01; 前言 一…

【编译工具】(自动化)自动化测试工具:如何让我的开发效率提升300%并保证代码质量?

目录 引言&#xff1a;自动化测试在现代开发中的关键作用 一、自动化测试金字塔&#xff1a;构建高效的测试策略 &#xff08;1&#xff09;测试金字塔模型 &#xff08;2&#xff09;各层级代表工具 二、前端自动化测试实战&#xff1a;Jest Cypress &#xff08;1&…

R语言缓释制剂QBD解决方案之一

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》缓释制剂包衣处方研究的R语言解决方案。 ER聚合物包衣处方优化研究 基于初步风险评估和初始可行性研究&#xff0c;进行带3个中心点的24-1分式析因DOE。药物的释放被识别为CQA。本研究的…

行为模式-命令模式

定义&#xff1a; 命令模式是一个高内聚的模式&#xff0c;其定义为&#xff1a;Encapsulate a request as an object,thereby letting you parameterize clients with different requests,queue or log requests,and support undoable operations.&#xff08;将一个请求封装成…

Ubuntu 24.04 上安装与 Docker 部署 Sentinel

Ubuntu 24.04 上安装与 Docker 部署 Sentinel 一、Sentinel 简介 Sentinel 是阿里巴巴开源的分布式系统流量控制组件&#xff0c;提供流量控制、熔断降级和系统负载保护等功能。它通过可视化控制台&#xff08;Dashboard&#xff09;实现实时监控和规则管理&#xff0c;是微服…

IP 地址查询在证券交易中的应用方式

网络安全保障与IP地址查询 证券交易平台存储着海量投资者的敏感信息以及巨额资金的交易数据&#xff0c;是网络攻击的重点目标。IP 地址查询在检测异常登录行为方面至关重要。例如&#xff0c;当一个账户短时间内先在国内某城市登录&#xff0c;随后又在境外 IP 地址发起交易操…

Flutter 常用组件详解:Text、Button、Image、ListView 和 GridView

Flutter 作为 Google 推出的跨平台 UI 框架&#xff0c;凭借其高效的渲染性能和丰富的组件库&#xff0c;已经成为移动应用开发的热门选择。本文将深入探讨 Flutter 中最常用的五个基础组件&#xff1a;Text、Button、Image、ListView 和 GridView&#xff0c;帮助开发者快速掌…

docker 单机部署redis集群(一)

docker 部署redis集群 1、创建redis网卡 docker network create redis --subnet 172.38.0.0/16查看网卡信息 docker network ls docker network inspect redis2、创建redis配置 #使用脚本创建6个redis配置for port in $(seq

MySQL 索引学习笔记

1.二叉树&#xff0c;红黑树&#xff0c;B 树&#xff0c;B树 二叉树&#xff1a;就是每个节点最多只能有两个子节点的树&#xff1b; 红黑树&#xff1a;就是自平衡二叉搜索树&#xff0c;红黑树通过一下五个规则构建&#xff1a; 1.节点只能是红色或黑色&#xff1b; 2.根…

Windows安装docker及使用

下载 https://www.docker.com/ 安装 启动 此时拉取镜像会报错 Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers) 配置引擎 添加以…

多参表达式Hive UDF

支持的操作符 &#xff1a;跳过&#xff0c;即无条件筛选&#xff1a;等于!&#xff1a;不等于range&#xff1a;区间内&#xff0c;range[n,m]表示 between n and mnrange&#xff1a;区间外&#xff0c;即not between andin&#xff1a;集合内&#xff0c;in(n,m,j,k)表示 in…

GO后端开发内存管理及参考答案

什么是 Go 的逃逸分析&#xff08;Escape Analysis&#xff09;&#xff0c;为什么需要它&#xff1f; Go 的逃逸分析是一种编译时技术&#xff0c;用于确定变量的生命周期是否超出其创建的函数作用域。通过分析变量的使用方式&#xff0c;编译器能够判断变量是否需要在堆上分…

未来智能系统演进路线:从AGI到ASI的技术蓝图

引言&#xff1a;智能革命的下一个十年 在AI技术突破性发展的当下&#xff0c;我们正站在通用人工智能&#xff08;AGI&#xff09;向人工超级智能&#xff08;ASI&#xff09;跃迁的关键转折点。本文将系统解析未来3-10年的技术演进路径&#xff0c;通过模块化组件插件&#…

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…

AI Agent 核心策略解析:Function Calling 与 ReAct 的设计哲学与应用实践

引言 在人工智能助手和自主Agent快速发展的今天&#xff0c;如何让AI系统不仅能够理解复杂指令&#xff0c;还能有效地执行任务并适应动态环境&#xff0c;成为技术演进的关键问题。本文将深入探讨两种核心的Agent设计策略&#xff1a;Function Calling&#xff08;函数调用&a…