Mybatis行为配置之Ⅳ—日志

专栏精选

引入Mybatis

Mybatis的快速入门

Mybatis的增删改查扩展功能说明

mapper映射的参数和结果

Mybatis复杂类型的结果映射

Mybatis基于注解的结果映射

Mybatis枚举类型处理和类型处理器

再谈动态SQL

Mybatis配置入门

Mybatis行为配置之Ⅰ—缓存

Mybatis行为配置之Ⅱ—结果相关配置项说明

Mybatis行为配置之Ⅲ—其他行为配置项说明

Mybatis行为配置之Ⅳ—日志

Mybatis整合Spring详解

Mybatis插件入门

Mybatis专栏代码资源

文章目录

  • 专栏精选
  • 引言
  • 摘要
  • 正文
      • logImpl
      • logPrefix
      • 配置log4j2日志系统
      • 配置logback日志系统
  • 总结

引言

大家好,我是奇迹老李,一个专注于分享开发经验和基础教程的博主。欢迎来到我的频道,这里汇聚了汇集编程技巧、代码示例和技术教程,欢迎广大朋友们点赞评论提出意见,重要的是点击关注喔 🙆,期待在这里与你共同度过美好的时光🕹️。今天要和大家分享的内容是Mybatis日志配置。做好准备,Let’s go🚎🚀

摘要

在这篇文章中,我们将介绍给Mybatis配置日志的基本方法,虽然在开发工作中Mybatis常作为整个系统的一个部分,而不会单独为其配置日志系统,但是给Mybatis配置日志还是很重要,比如调试过程中查看SQL查询日志,那么Mybatis的日志配置将会对它的运行逻辑产生怎样的影响呢,准备好开启今天的奇妙旅程吧。

正文

首图

在Mybatis中与日志相关的配置项有logImpllogPrefix两个,在日常开发工作中,logImpl相对更常用,而logPrefix不常用,下面简单介绍这两个配置

logImpl

备注:设置Mybatis日志的具体实现
可选值:

  1. SLF4J
  2. LOG4J(3.5.9 起废弃)
  3. LOG4J2
  4. JDK_LOGGING
  5. COMMONS_LOGGING
  6. STDOUT_LOGGING
  7. NO_LOGGING

默认值:自动
建议值:根据实际情况设置,尽量设置一个
建议原因:官方文档建议

MyBatis 内置日志工厂基于运行时自省机制选择合适的日志工具。它会使用第一个查找得到的工具(按上文列举的顺序查找)。如果一个都未找到,日志功能就会被禁用。

不少应用服务器(如 Tomcat 和 WebShpere)的类路径中已经包含 Commons Logging,所以在这种配置环境下的 MyBatis 会把它作为日志工具,记住这点非常重要。这将意味着,在诸如 WebSphere 的环境中,它提供了 Commons Logging 的私有实现,你的 Log4J 配置将被忽略。MyBatis 将你的 Log4J 配置忽略掉是相当令人郁闷的(事实上,正是因为在这种配置环境下,MyBatis 才会选择使用 Commons Logging 而不是 Log4J)。如果你的应用部署在一个类路径已经包含 Commons Logging 的环境中,而你又想使用其它日志工具,你可以通过在 MyBatis 配置文件 mybatis-config.xml 里面添加一项 setting 来选择别的日志工具。

——《mybatis官方文档》

logPrefix

备注:指定 MyBatis 增加到日志名称的前缀
默认值:未设置
建议值:不设置
建议原因:此设置后会影响日志系统的默认行为,因此不建议设置,如有必要设置名称前缀,可以在日志配置文件中设置日志规则

配置log4j2日志系统

Log4j的详细配置项见

配置步骤

  1. 引入log4j2
  2. 新增log4j2配置文件,文件路径 resources/log4j2.xml
  3. 修改mybatis配置(可不修改,Mybatis会自动使用对应的日志)
<!--pom文件-->
<dependency>  <groupId>org.apache.logging.log4j</groupId>  <artifactId>log4j-core</artifactId>  <version>2.21.0</version>
</dependency>
<!--日志配置文件-->
<?xml version="1.0" encoding="UTF-8"?>  
<Configuration xmlns="http://logging.apache.org/log4j/2.0/config">  <Appenders>        <Console name="stdout" target="SYSTEM_OUT">  <!--设置日志打印格式--><PatternLayout pattern="[%C#%M(%L)] %5level [%t] %msg%n"/>  </Console>    </Appenders>  <Loggers>        <!--设置日志级别--><Logger name="top.sunyog.mybatis.mapper" level="debug"/>  <Logger name="org.apache.ibatis.session.AutoMappingUnknownColumnBehavior" level="warn"/>  <Root level="error" >  <AppenderRef ref="stdout"/>  </Root>    </Loggers>  
</Configuration>
<!--mybatis配置-->
<setting name="logImpl" value="log4j"/>

测试log4j2日志系统的打印

[org.apache.ibatis.logging.jdbc.BaseJdbcLogger#debug(137)] DEBUG [main] ==>  Preparing: select * from test_demo
[org.apache.ibatis.logging.jdbc.BaseJdbcLogger#debug(137)] DEBUG [main] ==> Parameters: 
TestDemo{demoId=1, demoName='测试名称', demoDesc='测试备注'}

配置logback日志系统

Mybatis的日志中默认不支持logback日志,但是logback实现了slf4j标准,而Mybatis支持slf4j日志,因此logback日志也能够使用
logback日志的配置方式如下

  1. 引入logback
  2. 新增logback日志配置文件,配置文件路径 resources/logback.xml
  3. 修改mybatis配置(可不修改,Mybatis会自动使用对应的日志)
<dependency>  <groupId>ch.qos.logback</groupId>  <artifactId>logback-classic</artifactId>  <version>1.0.13</version>  
</dependency>
<?xml version="1.0" encoding="UTF-8" ?>  
<configuration debug="false">  <!-- 日志输出格式 -->  <property name="ENCODER_PATTERN" value="%yellow(%d{yyyy-MM-dd  HH:mm:ss.SSS}) %red([%thread] %-5level %logger{80}) - %green(%msg%n)" />  <!-- 控制台日志:输出全部日志到控制台 -->  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">  <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">  <Pattern>${ENCODER_PATTERN}</Pattern>  <charset>UTF-8</charset>  </encoder>    </appender>  <logger name="top.sunyog.mybatis.mapper" level="DEBUG" addtivity="false"></logger>  <root level="error">  <appender-ref ref="STDOUT" />  </root>
</configuration>

测试logback日志系统的打印

2023-12-28  14:51:24.037 [main] DEBUG top.sunyog.mybatis.mapper.LessonMapper.getDemos - ==>  Preparing: select * from test_demo
2023-12-28  14:51:24.063 [main] DEBUG top.sunyog.mybatis.mapper.LessonMapper.getDemos - ==> Parameters: 
TestDemo{demoId=1, demoName='测试名称', demoDesc='测试备注'}

注意事项:如果在Mybatis项目中存在多个日志系统,mybatis会自动在其中选择一个,如果需要修改为其他的日志系统,那么logImpl这个配置就很有用了,它可以指定具体使用哪一个日志系统,对于logback和log4j2的配置如下

<!--logback日志系统使用以下配置-->
<setting name="logImpl" value="slf4j"/><!--log4j2日志系统使用以下配置-->
<setting name="logImpl" value="log4j2"/>

总结

Mybatis的日志相关的代码都在 org.apache.ibatis.logging.*这个包下,其中定义了很多日志的行为,因此配置完日志系统后不需要对Mybatis进行任何修改即可产生相应的日志内容。虽然框架提供的功能很强大,但还是有一些细节需要注意,比如

  1. Mybatis支持log4j和log4j2,但没有logback的支持,需要通过slf4j间接使用logback
  2. 当mybatis项目中存在多个日志系统时,可以通过配置修改Mybatis默认使用的日志系统

📩 联系方式
邮箱:qijilaoli@foxmail.com

❗版权声明
本文为原创文章,版权归作者所有。未经许可,禁止转载。更多内容请访问奇迹老李的博客首页

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

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

相关文章

系统启动流程 - 理解modules加载流程

​编辑 Hacker_Albert    202 linux 启动流程module加载 1.启动过程分为三个部分 BIOS 上电自检&#xff08;POST&#xff09;引导装载程序 (GRUB2)内核初始化启动 systemd&#xff0c;其是所有进程之父。 1.1.BIOS 上电自检&#xff08;POST&#xff09; BIOS stands for…

前端网络面试:浏览器输入地址后发生了什么?

理解整块的内容涉及到的 UDP、TCP 以及 http、https 相关知识 1. 请求前 浏览器自动补全协议、端口浏览器自动完成 url 编码浏览器根据 url 地址查找本地缓存&#xff0c;根据缓存规则看是否命中缓存 若命中缓存则直接使用缓存&#xff0c;不再发出请求未命中直接请求 通过 DN…

图像拼接——基于homography的特征匹配算法

目录 1. 任务要求2. 数据集3. 基于homography的特征匹配算法4. 拼接流程展示4.1 图片实例4.2 特征点位图4.3 特征点匹配结果4.4 相机校准结果4.5 拼接结果 5. 部分图像拼接结果展示 1. 任务要求 输入&#xff1a;同一个场景的两张待拼接图像&#xff08;有部分场景重合&#x…

拓展操作(一) Linux 2台机器之间进行免密登录

让清单成为一种习惯 互联网时代的变革,不再是简单的开发部署上线,持续,正确,安全地把事情做好尤其重要;把事情做好的前提是做一个可量化可执行的清单,让工程师就可以操作的清单而不是专家才能操作: 设定检查点 根据节点执行检查程序操作确认或边读边做 二者选其一不要太…

macOS系统打开Linux的方法

第一步 按下[command空格键]调出搜索框&#xff0c;输入“终端”&#xff0c;打开图上第一个 第二步 如图先输入"sudo -i"&#xff0c;敲回车键&#xff0c;再输入开机密码&#xff0c;再敲回车键就可以打开。注意&#xff1a;这里的密码输入不会显示在页面。 如果要…

SpringMVC之RESTful案例

学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持&#xff0c;想组团高效学习… 想写博客但无从下手&#xff0c;急需…

Qt基础之四十三:Qt智能指针(QPointer、QSharedPointer、QWeakPointer和QScopedPointer)

一.QPointer QPointer是一个模板类,用于指向QObject或其派生类对象。当QPointer指向的对象销毁时,它会被自动设置为nullptr(在QObject析构时),这和普通C++指针是不同的(普通的C++指针delete后会变为“悬空指针”,需要手动设置为nullptr)。 QPointer的使用场景:QPoint…

JavaEE - 网络编程之回显服务器

目录 一.什么是回显服务器&#xff1f; 二.UDP是什么&#xff1f; 1.TCP 是有链接的&#xff0c; UDP 是无连接的 2.TCP是可靠传输的,UDP是不可靠传输的 3.TCP是面向字节流的&#xff0c;UDP是面向数据报 4.TCP和UDP是全双工的 三.UDP的 socket api 四. 具体代码实现 …

Qt Designer中各个模块的详细介绍,小白一看就会!!第3部分——Item Views (Model-Based) 模块介绍

Item Views (Model-Based) 模块的详细介绍 在Qt Designer中&#xff0c;Item Views (Model-Based) 模块是一组基于模型/视图&#xff08;Model/View&#xff09;架构的控件&#xff0c;用于展示和操作数据。这些控件与数据模型紧密结合&#xff0c;使得数据展示变得更加灵活和…

SAP问题 OPEN SQL 取不到值

关键&#xff1a;数据库中有数据&#xff0c;但是open sql取不到数据 背景&#xff1a; 标准程序在测试环境正常执行&#xff0c;在生产环境报错。 解决过程&#xff1a; 第一步&#xff1a;分析执行结果不一致可能的原因&#xff1a; 1.测试数据问题&#xff0c;可能性小&…

『矩阵论笔记』中篇:张量CP分解的详细推导以及Python实现

中篇:张量CP分解的详细数学推导以及Python实现 文章目录 一. 张量的CP分解1.1. CP分解的表示1.2. 交替最小二乘法求解1.3. 交替最小二乘法Python代码1.4. 梯度下降法求解1.5. 梯度下降法Python代码二. 参考文献『矩阵论笔记』上篇:张量CP分解的详细数学推导以及Python实现『矩…

lv13 内核模板编译方法 7

1 内核模块基础代码解析 Linux内核的插件机制——内核模块 类似于浏览器、eclipse这些软件的插件开发&#xff0c;Linux提供了一种可以向正在运行的内核中插入新的代码段、在代码段不需要继续运行时也可以从内核中移除的机制&#xff0c;这个可以被插入、移除的代码段被称为内…

Vue3父组件props数据更新后,子组件视图未及时响应更新

问题描述&#xff1a; 在使用Vue3构建前端项目时&#xff0c;遇到了一个组件props数据更新后&#xff0c;子组件视图未及时响应更新的问题。具体表现为父组件向子组件传递的props数据发生变化&#xff0c;但在子组件中该props并未触发视图重新渲染。 分析问题&#xff1a; 在…

Python将普通图像转化为栅格影像

引言 本人研究的方向是遥感&#xff0c;研究了2年也搞没清楚普通图像和遥感影像的区别&#xff0c;只知道到了多了地理坐标信息&#xff0c;但是经纬度信息映射到每个图像像素点的底层逻辑我还不太理解。因为现在需要使用python将图像转化为栅格影像&#xff0c;所以在此仔细研…

排查 JVM 中的 OOM 问题详细指南

当 Java 应用程序抛出 OutOfMemoryError&#xff08;简称 OOM&#xff09;时&#xff0c;意味着 Java 虚拟机&#xff08;JVM&#xff09;在尝试为对象分配内存时没有足够的空间。这可能是由多种原因造成的&#xff0c;例如内存泄露、过大的垃圾收集开销、不恰当的堆大小设置等…

园林机械部件自动化三维测量检测形位公差-CASAIM自动化三维检测工作站

随着园林机械的广泛应用&#xff0c;对其机械部件的精确测量需求也日益增加。传统的测量方法不仅效率低下&#xff0c;而且精度难以保证&#xff0c;因此&#xff0c;自动化三维测量技术成为了解决这一问题的有效途径。本文将重点介绍CASAIM自动化三维检测工作站在园林机械部件…

Docker 数据持久化的三种方式

-v ${local_path}:${docker_path} Docker提供了三种不同的方式将数据从宿主机挂载到容器中&#xff1a;volume、bind mounts、tmpfs mounts volume&#xff1a;Docker管理宿主机文件系统的一部分&#xff08;/var/lib/docker/volumes&#xff09; bind mounts&#xff1a;可…

51系列--拨码开关编码控制的数码管显示设计

本文介绍基于51单片机的拨码开关编码控制的数码管显示设计&#xff08;完整Proteus仿真源文件及C代码见文末链接&#xff09; 一、系统及功能介绍 本设计主控芯片选用51单片机&#xff0c;主要实现拨码开关开关不同组合的数值在4位数码管上显示出来&#xff0c;拨码开关一共是…

关于Sql数据库中去掉字段的所有空格

这篇文章主要介绍了Sql数据库中去掉字段的所有空格小结篇,本文通过示例代码给大家介绍的非常详细&#xff0c;对大家的学习或工作具有一定的参考借鉴价值&#xff0c;需要的朋友可以参考下 − Sql数据库中去掉字段的所有空格 字符前的空格&#xff0c;用ltrim(string) 字符…

机器学习的一般步骤

机器学习专注于让机器从大量的数据中模拟人类思考和归纳总结的过程&#xff0c;获得计算模型并自动判断和推测相应的输出结果。机器学习的一般步骤可以概括为以下几个阶段&#xff1a; 数据收集和准备&#xff1a; 收集与问题相关的数据&#xff0c;并确保数据的质量和完整性。…