1: 开启mybatis默认的日志
在核心配置文件中添加
具体可以配置那些日志类型可以参考
https://mybatis.net.cn/configuration.html#settings下的logImpl配置项的值
mybatis 默认实现了STDOUT_LOGGING这个类型
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
2:在日常开发中最常使用SLF4J风格的三种日志 SLF4J | LOG4J | LOG4J2
SLF4J | LOG4J | LOG4J2 都是SLF4J 风格的日志 其中
LOG4J 由于漏洞问题已经不建议继续使用了
LOG4J2 和 实现了 SLF4J风格的LOGBACK 比较流行,而且日志生成速度是 LOG4J1.x
的几倍到几百倍,还实现了异步的日志处理方式
2.1: logback 配置案例
在pom.xml 中添加
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.3.8</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-core -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.3.8</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>2.0.11</version>
</dependency>
修改核心配置文件中日志实现的的值为SLF4J <setting name="logImpl" value="SLF4J"/>
https://logback.qos.ch/manual/configuration.html 配置官方路径
找到:Configuration with logback-test.xml or logback.xml
Automatically configuring logback 参考其使用方式和配置
在我们自己的类路径下添加 logback.xml
在daoImpl 中添加
static final Logger logger = LoggerFactory.getLogger(UserDaoImpl.class);
logger.info("==========queryUserById begin=========");
logback.xml的内容
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoders are assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%kvp- %msg%n</pattern>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="STDOUT" />
</root>
</configuration>
切换 <root level="debug"> 的值 info debug 可以看到日志不同的效果
STDOUT : 输出到控制台
<pattern>%d{yyyy:MM:dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} -%kvp- %msg%n</pattern> 参数解释
第一列日志时间以及各式 %d{yyyy:MM:dd HH:mm:ss.SSS}
第二列线程名称 [%thread]
第三列日志级别 %-5level 5表示5个字符宽度
第四列 %logger{50} 表示该条日志所属类的全名 最大显示长度50
第六列 %msg 也可以写作%m,表示这条日志的内容
第七列 %n 换行
将日志写入文件
添加appender
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>myApp.log</file>
<encoder>
<pattern>%date %level [%thread] %logger{10} [%file:%line] -%kvp- %msg%n</pattern>
</encoder>
</appender>
添加ref
<root level="debug">
<appender-ref ref="FILE" />
<appender-ref ref="STDOUT" />
</root>
滚动日志
<configuration>
<!--
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>myApp.log</file>
<encoder>
<pattern>%date %level [%thread] %logger{10} [%file:%line] -%kvp- %msg%n</pattern>
</encoder>
</appender>
-->
<appender name="RollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--
<fileNamePattern>${catalina.home:-.}/logs/mabatis01-%d{yyyy-MM-dd}.log</fileNamePattern>
-->
<!--时间滚动策略,每天生成一个.log文件-->
<fileNamePattern>D:\logs\mabatis01-%d{yyyy-MM-dd}.log</fileNamePattern>
<!--设置最大保存时间 10 天-->
<maxHistory>10</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%date %level [%thread] %logger{10} [%file:%line] -%kvp- %msg%n</pattern>
</encoder>
</appender>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoders are assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%kvp- %msg%n</pattern>
</encoder>
</appender>
<root level="debug">
<!-- <appender-ref ref="FILE" /> -->
<appender-ref ref="RollingFile" />
<appender-ref ref="STDOUT" />
</root>
</configuration>
在 daoImpl 中加入打印日志的逻辑验证日志
for (int i = 0; i < 100; i++) {
logger.info("==========queryUserById begin=========");
try {
Thread.sleep(10);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
3:引入外部配置文件
在核心配置文件中添加
<!-- resource 表示读取类路径下的配置 -->
<properties resource="config.properties"/>
<!-- 不推荐使用下面url的方式 不灵活,不方便系统迁移或升级 用的是绝对路径-->
<!-- <properties url="file:D:\myBatis01\src\main\resources\config.properties"/> -->
在类路径下添加 config.properties
driver=com.mysql.cj.jdbc.Driver
修改核心配置文件的数据库配置的driver 项
<property name="driver" value="${driver}"/>