java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > MyBatis日志

MyBatis实战指南之MyBatis日志详解

作者:珹洺

本文系统讲解MyBatis日志模块,涵盖日志作用、框架选择(SLF4J/Log4j等)、配置方法、源码解析及日志级别控制,帮助开发者掌握调试技巧与性能优化实践,感兴趣的朋友跟随小编一起看看吧

前言

一、为什么需要日志?

举个生活中的例子:你网购收到商品发现有问题,打电话给客服时,客服需要查看订单记录(日志)才能定位问题。MyBatis的日志也是一样的道理:

最常用的场景:当你发现查询结果不对时,第一时间打开日志看看实际执行的SQL是什么,90%的问题都能通过对比SQL找到原因!

二、日志框架怎么选?

MyBatis本身不自带日志实现,需要集成第三方日志框架。

框架名称优点缺点适合场景
SLF4J统一日志接口,支持多种实现(如Logback)不能单独使用,必须搭配具体实现新项目首选,推荐搭配Logback
Log4j老牌框架,配置简单性能一般,新版本Log4j2已发布兼容旧项目
Log4j2性能更好,支持异步日志配置比Log4j复杂一点对性能要求高的项目
Java自带JUL无需额外依赖功能简单,配置不够灵活极简项目或临时调试

1. 手把手教你集成(以最常用的SLF4J+Logback为例)

步骤1:添加依赖(Maven项目)

<!-- SLF4J接口 -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>2.0.7</version>
</dependency>
<!-- Logback实现 -->
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.4.13</version>
</dependency>

步骤2:在MyBatis配置文件中开启日志

mybatis-config.xml中添加:

<settings>
    <!-- 设置日志工厂为SLF4J -->
    <setting name="logImpl" value="SLF4J"/>
</settings>

步骤3:配置Logback日志文件

src/main/resources目录下新建logback.xml,核心配置如下(重点看注释):

<configuration>
    <!-- 定义日志输出格式 -->
    <pattern name="simplePattern">%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n</pattern>
    <!-- 控制台输出 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${simplePattern}</pattern>
        </encoder>
    </appender>
    <!-- 重点:配置MyBatis日志输出 -->
    <logger name="org.apache.ibatis" level="DEBUG"/> <!-- 输出MyBatis自身日志 -->
    <logger name="com.yourcompany.mapper" level="DEBUG"/> <!-- 输出你的Mapper接口日志 -->
    <root level="INFO"> <!-- 全局日志级别,优先级低于上面的logger -->
        <appender-ref ref="CONSOLE"/>
    </root>
</configuration>

三、配置方式详解

1. MyBatis自身的日志配置

mybatis-config.xml中,通过<settings>标签配置:

2. 日志级别控制

日志级别从低到高依次是:DEBUG < INFO < WARN < ERROR,级别越高,输出的内容越少。

3. Spring Boot中怎么配?

如果你用Spring Boot,不需要单独写MyBatis配置文件,直接在application.properties中配置:

# 开启MyBatis日志
mybatis.configuration.log-impl=org.apache.ibatis.logging.slf4j.Slf4jImpl
# 配置具体Mapper的日志级别(比如只打印UserMapper的DEBUG日志)
logging.level.com.yourcompany.mapper.UserMapper=DEBUG

四、源码解析:搞懂MyBatis日志底层逻辑

如果你对底层原理好奇,可以简单了解这几个核心类,不用记代码,知道它们的关系就行:

1. 日志接口 Log

MyBatis定义了一个统一的日志接口Log,所有日志框架都要实现这个接口。比如Slf4jImpl就是SLF4J的实现类,Log4jImpl是Log4j的实现类。

2. 日志工厂LogFactory

它就像一个"工厂",根据你配置的logImpl,生产对应的日志对象。比如你配置了SLF4J,它就会创建Slf4jImpl对象。

3. 自动检测机制

如果你的项目中同时存在多个日志框架(比如同时有Log4j和SLF4J),MyBatis会按以下顺序自动选择:

SLF4J → LOG4J2 → LOG4J → JUL → STDOUT(控制台输出)→ NO_LOGGING(无日志)

所以建议只保留一个日志框架,避免冲突。

以上就是这篇博客的全部内容,下一篇我们将继续探索MyBatis的更多精彩内容。

到此这篇关于MyBatis实战指南之MyBatis日志详解的文章就介绍到这了,更多相关MyBatis日志内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文