0%

Logback浅析

Logback 使用

官方文档

http://logback.qos.ch/manual/appenders.html

依赖

默认 Springboot 自带依赖

1
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-logging'

配置

encoder 节点

<encoder>表示对日志进行编码:

  • %d{HH: mm:ss.SSS}——日志输出时间。
  • %thread——输出日志的进程名字,这在 Web 应用以及异步任务处理中很有用。
  • %-5level——日志级别,并且使用 5 个字符靠左对齐。
  • %logger{36}——日志输出者的名字。
  • %msg——日志消息。
  • %n——平台的换行符。

Root 子节点

root 节点是必选节点,用来指定最基础的日志输出级别,只有一个 level 属性,用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,不能设置为 INHERITED 或者同义词 NULL。

默认是 DEBUG。可以包含零个或多个元素,标识这个 appender 将会添加到这个 logger。

1
2
3
4
<root level="debug">
<appender-ref ref="console" />
<appender-ref ref="file" />
</root>

logger 子节点

<logger>用来设置某一个包或者具体的某一个类的日志打印级别、以及指定<appender><logger>仅有一个 name 属性,一个可选的 level 和一个可选的 addtivity 属性。

  • name:用来指定受此 logger 约束的某一个包或者具体的某一个类。
  • level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,还有一个特俗值 INHERITED 或者同义词 NULL,代表强制执行上级的级别。如果未设置此属性,那么当前 logger 将会继承上级的级别。
  • addtivity:是否向上级 logger 传递打印信息。默认是 true。
1
2
3
4
5
6
7
8
9
10
<root level="INFO">
<appender-ref ref="STDOUT"/>
</root>

<logger name="zlin.site.framework.generator.controller.StudentController" level="WARN"/>

<!-- additivity=false 则当前logger配置只会输出到指定appender中 -->
<logger name="zlin.site.framework.generator.controller.StudentController" level="INFO" additivity="false">
<appender-ref ref="STDOUT"/>
</logger>
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
91
92
93
94
95
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 引入profiles配置文件中的变量 -->
<springProperty scope="context" name="LOG_PATH" source="log.path" defaultValue="logAll"/>
<springProperty scope="context" name="APP_NAME" source="spring.application.name" defaultValue="app"/>

<!-- 输出到控制台 -->
<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} - %msg%n</pattern>
</encoder>
</appender>

<!-- 输出到文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/${APP_NAME}.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 打包策略配置 -->
<fileNamePattern>${LOG_PATH}/${APP_NAME}-%d{yyyy-MM-dd}.log.%i.gz</fileNamePattern>
<!-- 单个日志文件大小限制 -->
<maxFileSize>100MB</maxFileSize>
<!-- 保留历史文件数 -->
<maxHistory>60</maxHistory>
<!-- 日志文件最大数 -->
<totalSizeCap>20GB</totalSizeCap>
</rollingPolicy>

<encoder>
<pattern>%date %level [%thread] %logger{10} [%file:%line] %msg%n</pattern>
</encoder>
</appender>

<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/${APP_NAME}.error.log</file>
<!-- 日志过滤器配置 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>

<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 打包策略配置 -->
<fileNamePattern>${LOG_PATH}/${APP_NAME}-%d{yyyy-MM-dd}.error.log.%i.gz</fileNamePattern>
<!-- 单个日志文件大小限制 -->
<maxFileSize>100MB</maxFileSize>
<maxHistory>60</maxHistory>
<totalSizeCap>20GB</totalSizeCap>
</rollingPolicy>

<encoder>
<pattern>%date %level [%thread] %logger{10} [%file:%line] %msg%n</pattern>
</encoder>
</appender>

<appender name="STUDENT" class="ch.qos.logback.core.FileAppender">
<file>${LOG_PATH}/student.log</file>
<encoder>
<pattern>%date %level [%thread] %logger{10} [%file:%line] %msg%n</pattern>
</encoder>
</appender>

<!-- 分环境输出不同日志 name的值是profile文件名 -->
<springProfile name="dev">
<root level="DEBUG">
<appender-ref ref="STDOUT"/>
</root>

<logger name="zlin.site.framework" level="INFO">
<appender-ref ref="FILE"/>
</logger>

<!-- additivity=false 则当前logger配置只会输出到指定appender中 -->
<logger name="zlin.site.framework.generator.controller.StudentController" level="INFO" additivity="false">
<appender-ref ref="STUDENT"/>
</logger>
</springProfile>

<!-- 分环境输出不同日志 name的值是profile文件名 -->
<springProfile name="prod">
<root level="INFO">
<appender-ref ref="STDOUT"/>
</root>

<logger name="zlin.site.framework" level="INFO">
<appender-ref ref="FILE"/>
</logger>

<logger name="zlin.site.framework.generator.controller.StudentController" level="INFO" additivity="false">
<appender-ref ref="STUDENT"/>
</logger>
</springProfile>

</configuration>