logback配置示例

springboot日志配置示例

介绍

  • springboot默认使用的是logback日志框架,有两种命名方式
    • logback.xml
    • logback-spring.xml

区别就是logback-spring.xml由Spring加载,这意味着它可以使用Spring的环境变量、属性占位符以及一些Spring Boot特有的功能。

示例说明

  • 配置文件说明

    1. 配置项
      • APP_NAME不指定默认从配置文件读取
      • logger标签的name属性需要你指定你的mapper所在的包名,否则不会打印sql语句
    2. 一共配置了四个输出方式
      • 控制台:没什么好说的就是输出到控制台
      • info.log:和控制台输出的内容一样,只不过是输出到文件
      • error.log:只记录error级别的日志
      • sql.log:只记录sql语句以及参数信息
    3. 日志滚动方式
      • 到达00:00:00自动切割,并且新建一个文件夹存储
      • 一个日志最大10MB
      • 最长保留一个月(sql日志只保留两天)
      • 超过10G自动删除(sql日志超过2G自动删除)
  • 知识点

1
2
3
4
5
6
# mybatis-plus的默认日志实现是Slf4jImpl,这个是没有问题的
# 如果你发现你的sql语句只在控制台输出,日志文件中没有,请检查是否将实现类配置成了org.apache.ibatis.logging.stdout.StdOutImpl
# StdOutImpl实现是使用System.out.pringln进行输出,所以不会记录到日志文件中
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl

示例

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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<contextName>${APP_NAME:-logback}</contextName>

<!-- 定义日志文件的存储地址 -->
<property name="LOG_HOME" value="${LOG_HOME:-${user.dir}/logs}" />
<springProperty scope="context" name="APP_NAME" source="spring.application.name"/>
<property name="LOG_LEVEL_PATTERN" value="${LOG_LEVEL_PATTERN:-%5p}" />
<property name="LOG_PATTERN" value="${LOG_PATTERN:-%-20(%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread]) %-5level %logger{80} -%msg%n}" />

<!-- 彩色日志 -->
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
<conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
<conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />

<!-- 彩色日志格式 -->
<property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN}) %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n}" />

<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
</encoder>
</appender>

<!-- 文件输出 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/${APP_NAME}.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/bak/%d{yyyy-MM-dd}/${APP_NAME}-%i.log</fileNamePattern>
<maxHistory>30</maxHistory>
<maxFileSize>20MB</maxFileSize>
<!--该滚动策略日志的总大小,超过的日志会被清除-->
<totalSizeCap>10GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>${LOG_PATTERN}</pattern>
</encoder>
</appender>

<!-- Error 文件输出 -->
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/${APP_NAME}-error.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/bak/%d{yyyy-MM-dd}/${APP_NAME}-error-%i.log</fileNamePattern>
<maxHistory>30</maxHistory>
<maxFileSize>20MB</maxFileSize>
<!--该滚动策略日志的总大小,超过的日志会被清除-->
<totalSizeCap>10GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>${LOG_PATTERN}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>error</level>
</filter>
</appender>

<!-- sql 文件输出 -->
<appender name="sql_log" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/${APP_NAME}-sql.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 日志文件输出文件名 -->
<fileNamePattern>${LOG_HOME}/bak/%d{yyyy-MM-dd}/${APP_NAME}-sql-%i.log</fileNamePattern>
<maxHistory>2</maxHistory>
<maxFileSize>10MB</maxFileSize>
<!--该滚动策略日志的总大小,超过的日志会被清除-->
<totalSizeCap>10GB</totalSizeCap>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${LOG_PATTERN}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>DEBUG</level>
</filter>
</appender>

<logger name="mapper随在包名" level="DEBUG" additivity="false">
<appender-ref ref="STDOUT"/>
<appender-ref ref="mysql_log" />
</logger>
<!-- 日志输出级别 -->
<root level="info">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
<appender-ref ref="ERROR_FILE" />
</root>

</configuration>