百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

MyBatis系列-2-日志配置(mybatis-plus 日志)

wptr33 2025-03-24 21:26 23 浏览

日积月累,方成大器。

各大网站:

Mybatis官方技术文档 https://mybatis.org/mybatis-3/zh/index.html
Mybatis源码包下载:https://github.com/mybatis/mybatis-3/releases
所有代码及笔记gitee路径:https://gitee.com/simple-coding/all-demo-code.git

一、关于Mybatis开发

要使用Mybatis开发只需引入mybatis-x.x.x.jar即可,想其它的日志等,如果需要可以另外引入包进行扩展。

本案例使用最新版本:mybatis-3.5.9.jar

二、日志配置

如果我们不引入第三方的日志包,那mybatis就不能对日志进行输出了吗?

首先,要知道Mybatis不引入第三方日志包,也能进行日志输出(默认日志功能禁用),只不过只能进行控制台输出,不能进行文件输出;另外,对于第三方日志,mybatis有特定的加载顺序,如果引入了多个日志实现也可以在主配置中通过settings进行配置,告诉mybatis我要用哪个进行输出

最新版本,第三方加载顺序如下、源码如下图(不同的mybatis版本可能不一样):

  • SLF4J
  • Apache Commons Logging
  • Log4j 2
  • Log4j (deprecated since 3.5.9)
  • JDK logging

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

Mybatis日志加载顺序

三、Mybatis支持哪些日志

Mybatis支持哪些日志的配置,那就要看我们的主配置文件中settings配置了,配置如下


日志实现指定

说白了就是支持常用实现JUL(java util logging)、logback、log4j、log4j2,而SLF4J和COMMONS_LOGGING其实就是日志门面技术,也就是接口。关于日志框架我们后续,会单独讲一下。

四、日志演示

1.STDOUT_LOGGING

STDOUT_LOGGING :是Mybatis内置实现,只做控制台输出。配置只需一步,也不需要引入第三方依赖:

  • 指定settings配置
  • 效果图

运行结果

2.SLF4J

首先声明SLF4J是日志门面技术,通过一系列中间转换操作,可以适配现有的任何日志技术。本节只做简单的配置实现logback。

  • 引入第三方包


		ch.qos.logback
		logback-classic
		1.2.11
  • 指定settings配置

不配置也行,第三方日志只有一个日志实现的情况下,有默认加载顺序,详见:第二部分、日志配置


  • 引入logback配置文件:logback.xml

开启debug级别,用于输出SQL语句。



    
    
    
    
        
            
            %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
        
    
    
    
        
            
            ${LOG_HOME}/%d{yyyy-MM-dd}/smifc.log.%d{yyyy-MM-dd}-%i.log
            10MB
            20
            100GB
        
        
            
            %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
        
    
    
    
        
    
    
        
    

  • 效果图

logback

3.JDK_LOGGING

JDK_LOGGING是个啥?其实它就是JDK自带的日志。也不需要我们引入第三方包。

jdk自带的日志,配置文件加载有三种方法:1.默认路径【
JRE_HOME/lib/logging.properties】;2.自定义加载配置文件路径【
java.util.logging.config.file】;3.自定义加载配置类【
java.util.logging.config.class】需要通过readConfiguration(InputStream) 实现

看下JDK源码LogManager加载配置实现:

JDK源码LogManager加载配置实现

  • 自定义加载配置文件路径【java.util.logging.config.file】实现

自定义加载路径

  • 引入logging.properties
handlers=java.util.logging.ConsoleHandler
.level=ALL

#mapper的命名空间
test=ALL

java.util.logging.ConsoleHandler.level=ALL
java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter
java.util.logging.SimpleFormatter.format=%1$tT.%1$tL %4$s %3$s - %5$s%6$s%n
  • 主配置文件指定日志实现
  • 效果图

运行结果

4.LOG4J、LOG4J2

LOG4J(log4j.properties)、LOG4J2(log4j2.xml)这两个实现和logback实现大同小异,直接引入实现jar包,变更主配置实现即可。

  • jar包引入

引入jar包

  • 主配置配置

指定日志实现

  • 配置文件

配置文件

  • 运行结果

运行结果

5.COMMONS_LOGGING

COMMONS_LOGGING (
commons-logging.properties)是一个日志门面技术,也就是接口,其自身自带简单实现

org.apache.commons.logging.impl.SimpleLog
也支持jdk的日志实现。这里我们引入commons-logging包使用其的简单日志实现。

另外,支持的实现如下:

 //LogFactoryImpl.java
 private static final String[] classesToDiscover = new String[]{"org.apache.commons.logging.impl.Log4JLogger", "org.apache.commons.logging.impl.Jdk14Logger", "org.apache.commons.logging.impl.Jdk13LumberjackLogger", "org.apache.commons.logging.impl.SimpleLog"};
  • 只引入commons-logging包


 commons-logging
 commons-logging
 1.2
  • 定义commons-logging.properties指明使用的日志实现
org.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog
  • 定义simplelog.properties配置日志信息
org.apache.commons.logging.simplelog.defaultlog=all
org.apache.commons.logging.simplelog.log.test=all
org.apache.commons.logging.simplelog.showlogname=true
org.apache.commons.logging.simplelog.showShortLogname=true
org.apache.commons.logging.simplelog.showdatetime=true
org.apache.commons.logging.simplelog.dateTimeFormat=yyyy-MM-dd hh:mm:ss
  • 主配置指定实现

  • 效果

运行结果

五、总结

在以上的日志配置中,我引入了所有的日志实现,通过控制主配置文件中配置

 

达到,具体要使用哪个的目的。如果整合Mybatis时有多个日志实现,可通过此配置控制。



相关推荐

MySQL进阶五之自动读写分离mysql-proxy

自动读写分离目前,大量现网用户的业务场景中存在读多写少、业务负载无法预测等情况,在有大量读请求的应用场景下,单个实例可能无法承受读取压力,甚至会对业务产生影响。为了实现读取能力的弹性扩展,分担数据库压...

Postgres vs MySQL_vs2022连接mysql数据库

...

3分钟短文 | Laravel SQL筛选两个日期之间的记录,怎么写?

引言今天说一个细分的需求,在模型中,或者使用laravel提供的EloquentORM功能,构造查询语句时,返回位于两个指定的日期之间的条目。应该怎么写?本文通过几个例子,为大家梳理一下。学习时...

一文由浅入深带你完全掌握MySQL的锁机制原理与应用

本文将跟大家聊聊InnoDB的锁。本文比较长,包括一条SQL是如何加锁的,一些加锁规则、如何分析和解决死锁问题等内容,建议耐心读完,肯定对大家有帮助的。为什么需要加锁呢?...

验证Mysql中联合索引的最左匹配原则

后端面试中一定是必问mysql的,在以往的面试中好几个面试官都反馈我Mysql基础不行,今天来着重复习一下自己的弱点知识。在Mysql调优中索引优化又是非常重要的方法,不管公司的大小只要后端项目中用到...

MySQL索引解析(联合索引/最左前缀/覆盖索引/索引下推)

目录1.索引基础...

你会看 MySQL 的执行计划(EXPLAIN)吗?

SQL执行太慢怎么办?我们通常会使用EXPLAIN命令来查看SQL的执行计划,然后根据执行计划找出问题所在并进行优化。用法简介...

MySQL 从入门到精通(四)之索引结构

索引概述索引(index),是帮助MySQL高效获取数据的数据结构(有序),在数据之外,数据库系统还维护者满足特定查询算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构...

mysql总结——面试中最常问到的知识点

mysql作为开源数据库中的榜一大哥,一直是面试官们考察的重中之重。今天,我们来总结一下mysql的知识点,供大家复习参照,看完这些知识点,再加上一些边角细节,基本上能够应付大多mysql相关面试了(...

mysql总结——面试中最常问到的知识点(2)

首先我们回顾一下上篇内容,主要复习了索引,事务,锁,以及SQL优化的工具。本篇文章接着写后面的内容。性能优化索引优化,SQL中索引的相关优化主要有以下几个方面:最好是全匹配。如果是联合索引的话,遵循最...

MySQL基础全知全解!超详细无废话!轻松上手~

本期内容提醒:全篇2300+字,篇幅较长,可搭配饭菜一同“食”用,全篇无废话(除了这句),干货满满,可收藏供后期反复观看。注:MySQL中语法不区分大小写,本篇中...

深入剖析 MySQL 中的锁机制原理_mysql 锁详解

在互联网软件开发领域,MySQL作为一款广泛应用的关系型数据库管理系统,其锁机制在保障数据一致性和实现并发控制方面扮演着举足轻重的角色。对于互联网软件开发人员而言,深入理解MySQL的锁机制原理...

Java 与 MySQL 性能优化:MySQL分区表设计与性能优化全解析

引言在数据库管理领域,随着数据量的不断增长,如何高效地管理和操作数据成为了一个关键问题。MySQL分区表作为一种有效的数据管理技术,能够将大型表划分为多个更小、更易管理的分区,从而提升数据库的性能和可...

MySQL基础篇:DQL数据查询操作_mysql 查

一、基础查询DQL基础查询语法SELECT字段列表FROM表名列表WHERE条件列表GROUPBY分组字段列表HAVING分组后条件列表ORDERBY排序字段列表LIMIT...

MySql:索引的基本使用_mysql索引的使用和原理

一、索引基础概念1.什么是索引?索引是数据库表的特殊数据结构(通常是B+树),用于...