网站首页 > 技术文章 正文
日积月累,方成大器。
各大网站:
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支持哪些日志的配置,那就要看我们的主配置文件中settings配置了,配置如下
说白了就是支持常用实现JUL(java util logging)、logback、log4j、log4j2,而SLF4J和COMMONS_LOGGING其实就是日志门面技术,也就是接口。关于日志框架我们后续,会单独讲一下。
四、日志演示
1.STDOUT_LOGGING
STDOUT_LOGGING :是Mybatis内置实现,只做控制台输出。配置只需一步,也不需要引入第三方依赖:
- 指定settings配置
<setting name="logImpl" value="STDOUT_LOGGING"/>
- 效果图
2.SLF4J
首先声明SLF4J是日志门面技术,通过一系列中间转换操作,可以适配现有的任何日志技术。本节只做简单的配置实现logback。
- 引入第三方包
<!--这个依赖直接包含了 logback-core实现 以及 slf4j-api日志门面的依赖-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.11</version>
</dependency>
- 指定settings配置
不配置也行,第三方日志只有一个日志实现的情况下,有默认加载顺序,详见:第二部分、日志配置
<!--使用logback-->
<setting name="logImpl" value="SLF4J"/>
- 引入logback配置文件:logback.xml
开启debug级别,用于输出SQL语句。
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
<property name="LOG_HOME" value="logs"/>
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<!-- 按照每天生成日志文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<fileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}/smifc.log.%d{yyyy-MM-dd}-%i.log</fileNamePattern>
<maxFileSize>10MB</maxFileSize>
<maxHistory>20</maxHistory>
<totalSizeCap>100GB</totalSizeCap>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<!-- 日志输出级别 -->
<root level="DEBUG">
<appender-ref ref="STDOUT"/>
</root>
<root level="DEBUG">
<appender-ref ref="FILE"/>
</root>
</configuration>
- 效果图
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加载配置实现:
- 自定义加载配置文件路径【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
- 主配置文件指定日志实现
<setting name="logImpl" value="JDK_LOGGING"/>
- 效果图
4.LOG4J、LOG4J2
LOG4J(log4j.properties)、LOG4J2(log4j2.xml)这两个实现和logback实现大同小异,直接引入实现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-->
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
- 定义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
- 主配置指定实现
<!--使用COMMONS_LOGGING简单日志-->
<setting name="logImpl" value="COMMONS_LOGGING"/>
- 效果
五、总结
在以上的日志配置中,我引入了所有的日志实现,通过控制主配置文件中配置
<setting name="logImpl" value="XXX"/>
达到,具体要使用哪个的目的。如果整合Mybatis时有多个日志实现,可通过此配置控制。
- 上一篇: 免费且好用的乐谱制作软件
- 下一篇: Nginx常见问题
猜你喜欢
- 2025-05-26 学习HackerOne上Flink、Grafana、jolokia攻击手法
- 2025-05-26 使用ANTLR开发自己的DSL语言(一)
- 2025-05-26 Spring技巧:深入研究Java 14和SpringBoot
- 2025-05-26 Nginx常见问题
- 2025-05-26 免费且好用的乐谱制作软件
- 2025-05-26 进阶版Python正则表达式大全,看到就赚到了
- 2025-05-26 让你把DeepSeek不借助插件装进WPS中 WPS接入DeepSeek人工智能
- 2025-05-26 在word中通过VBA调用百度翻译API在线翻译
- 2025-05-26 Java文件读取终极指南:4种方式对比与性能优化实战
- 2025-05-26 Groovy和Java
- 最近发表
-
- 使用这个新的 ECMAScript 运算符告别 Try/Catch!
- 抛弃 try-catch,错误处理的新方案
- 深圳尚学堂Java培训:总结java编程常用的快捷键(二)
- Try-catch speeding up my code?(speeding up)
- 能代替try catch处理异常的优雅方式
- Linux系统stress压力测试工具(linux自带的压力测试)
- ESL-通过事件控制FreeSWITCH(es事务控制)
- 谈JVM xmx, xms等内存相关参数合理性设置
- 嵌入式工程师竟然看不懂这些专业语句,那真别怪人说你菜
- 不会前端也能写官网?没问题,Devbox+Cursor 带你起飞
- 标签列表
-
- cmd/c (64)
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- sqlset (64)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- linux删除一个文件夹 (65)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)