最近在学习
spring boot
,日志用的是logback
,至于为什么没有选常用的log4j
,因为logback
是spring boot
官方推荐的日志系统。但是在整合Mybatis
的时候一直打印不了SQL
语句,查阅多方资料,终于解决了~
先展示下
logback-spring.xml
的完整内容1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>【xkcoding】%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{36} - %msg%n</pattern>
</layout>
</appender>
<appender name="fileLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--滚动策略-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--输出路径-->
<fileNamePattern>${user.dir}/logs/log/online-study.%d.log</fileNamePattern>
</rollingPolicy>
<encoder>
<pattern>【xkcoding】%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<!--滚动策略-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--输出路径-->
<fileNamePattern>${user.dir}/logs/error/online-study.%d.error</fileNamePattern>
</rollingPolicy>
<encoder>
<pattern>【xkcoding】%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!--
logger
属性:
1)name:用来指定受此logger约束的某一个包或者具体的某一个类
2)level:用来设置打印级别,大小写无关(最常用的几种):DEBUG, INFO, WARN, ERROR
-->
<!-- 用于打印 Spring 在启动的时候初始化各个 Bean 的信息 -->
<logger name="org.springframework.web" level="DEBUG"/>
<!-- mybatis 日志打印如果在 ssm 中,可能就需要下边的7行了。-->
<!--<logger name="com.ibatis" level="DEBUG" />-->
<!--<logger name="com.ibatis.common.jdbc.SimpleDataSource" level="DEBUG" />-->
<!--<logger name="com.ibatis.common.jdbc.ScriptRunner" level="DEBUG" />-->
<!--<logger name="com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate" level="DEBUG" />-->
<!--<logger name="java.sql.Connection" level="DEBUG" />-->
<!--<logger name="java.sql.Statement" level="DEBUG" />-->
<!--<logger name="java.sql.PreparedStatement" level="DEBUG" />-->
<!-- 以下这一句至关重要如果没有,就无法输出 sql 语句 -->
<!--注意:在 spring boot 中,想在控制台打印 mybatis 的 sql 语句,只需要配置下边这一句就好了。-->
<!--如果想要记录更详细的 SQL 日志,只需要把下面的日志级别改成 TRACE 就可以了-->
<!--即将 mapper 接口打入 logger 就行。-->
<logger name="com.xkcoding.dao" level="DEBUG"></logger>
<root level="info">
<appender-ref ref="consoleLog"/>
<appender-ref ref="fileLog"/>
<appender-ref ref="fileErrorLog"/>
</root>
</configuration>如果是 Log4J 实现的话可以参考Mybatis 日志
第一个节点
consoleLog
是在控制台显示的 Log 日志,在控制台显示 Log 日志需要在appender
节点里配置class="ch.qos.logback.core.ConsoleAppender"
,格式化输出的配置在pattern
节点中配置,各个参数的介绍如下:1
2
3
4
5
6%-5level: 显示 Log 级别,从左显示5个字符宽度,打印内容: TRACE/DEBUG/INFO/WARN/ERROR
%d{yyyy-MM-dd HH:mm:ss.SSS}: 显示时间戳,{}中内容代表时间戳格式
%thread: 显示线程名字
%logger{36}: 表示 logger 名字最长36个字符,否则按照句点分割
%msg: 日志消息
%n: 换行符第二个节点
fileLog
是将日志保存为文件,需要在appender
节点里配置class="ch.qos.logback.core.rolling.RollingFileAppender"
,并且指定滚动策略,为每天一个文件,指定文件名为%d.log
。1
2
3
4
5<!--滚动策略-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--输出路径-->
<fileNamePattern>${user.dir}/logs/log/online-study.%d.log</fileNamePattern>
</rollingPolicy>第三个节点
fileErrorLog
是将错误日志记录在文件中,不保存其他级别的日志,需要配置一个filter
节点。拦截内容如下(注意单词大小写,千万不能出错!
):1
2
3
4
5<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>在这里再推荐一个 maven 依赖,
lombok
1
2
3
4<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>在 idea 里安装
lombok
的相应插件
然后就可以在类名上方添加
@Slf4j
注解,这样就可以直接在代码中使用log.info("....")
打印日志了。再提示下
lombok
的其他使用技巧,如果使用了lombok
,只要在实体类的类名上加上@Data
注解,那么我们就不需要写getter/ setter/toString
方法,lombok
会自动生成getter/setter/toString
方法,我们直接调用就可以了,如果只需要生成getter
或者setter
,就可以直接使用@Getter
或者@Setter
注解。并且@Getter
和@Setter
这两个注解不止可以用在Class
上,还可以用在Enum
上哦。就介绍到这儿,enjoy it !!!