spring_boot_logback详解

Spring boot官网

https://spring.io/

点击projects中的spring boot

点击learn中Reference Doc

点击Core Features

点击logging

配置

spring boot 默认是使用Logback日志记录。

输出日志:配置方式、输出位置、输出格式、级别控制

配置方式

1.使用spring boot 的配置文件 如application.properties application.yml

2.指定logback的配置文件

方式一

指定文件名或文件路径,文件名>文件路径,两属性应该不可以一起使用。

1
logging.file.name=my.log
1
logging.file.path=/Users/qichuanhan/logs/

滚动:

logging.logback.rollingpolicy.file-name-pattern 用于创建日志存档的文件名模式。
logging.logback.rollingpolicy.clean-history-on-start 如果应在应用程序启动时进行日志归档清理。
logging.logback.rollingpolicy.max-file-size 归档前日志文件的最大大小。
logging.logback.rollingpolicy.total-size-cap 在被删除之前可以占用的最大大小的日志档案。
logging.logback.rollingpolicy.max-history 要保留的存档日志文件的最大数量(默认为 7)。

方式二

创建logback.xml在classpath

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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 日志存放路径 -->
<property name="log.path" value="/home/trans/logs" />
<!-- 日志输出格式 -->
<property name="log.pattern" value="%d{HH:mm:ss.SSS} -[%X{traceId}]- [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />

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

<!-- logstash -->
<!--<appender name="stash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">-->
<!--<destination>39.103.144.58:9250</destination>-->
<!--&lt;!&ndash; encoder必须配置,有多种可选 &ndash;&gt;-->
<!--<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder" >-->
<!--&lt;!&ndash; "appname":"trans-core" 的作用是指定创建索引的名字时用,并且在生成的文档中会多了这个字段 &ndash;&gt;-->
<!--<customFields>{"appname":"trans-core"}</customFields>-->
<!--</encoder>-->
<!--</appender>-->

<!-- 系统日志输出 -->
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/sys-info.log</file>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>${log.path}/sys-info.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>60</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>INFO</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>

<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/sys-error.log</file>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>${log.path}/sys-error.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>60</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>ERROR</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>

<!-- 用户访问日志输出 -->
<appender name="sys-user" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/sys-user.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 按天回滚 daily -->
<fileNamePattern>${log.path}/sys-user.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>60</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
</appender>

<!--输出到文件的Appender配置SQL执行日志-->
<appender name = "file_sql" class = "ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/sys-sql.log</file>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<!--日志记录器的滚动策略,按日期,按大小记录-->
<rollingPolicy class = "ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.path}/sys-sql.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>2048MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!--日志文件保留天数-->
<maxHistory>5</maxHistory>
<!--该滚动策略日志的总大小,超过的日志会被清除-->
<totalSizeCap>15GB</totalSizeCap>
</rollingPolicy>
<!--此日志文件记录TRACE级别以上-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>DEBUG</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>

<!-- 系统模块日志级别控制 -->
<logger name="com.trans" level="info" />
<!-- Spring日志级别控制 -->
<logger name="org.springframework" level="warn" />

<!--系统用户操作日志-->
<logger name="sys-user" level="info">
<appender-ref ref="sys-user"/>
</logger>


<!-- <logger>用来设置某一个包或者具体的某一个类的日志打印级别。有name属性,可选的level和可选的addtivity属性,以及可指定appender。
name:用来指定受此logger约束的菜一个包或者具体的某一个类。
level:用来设置打印级别,大小写无关:TRACE,DEBUG, INFO,WARN,ERROR,ALL和OFF,如果未设置此属性,那么当前logger将会继承上级的级别。addtivity :是否向上级logger传递打印信息。默认是true。
-->
<!--
使用mybatis的时候, sql语句是debug下才会打印,spring默认日志级别是INFO,所以想要查看sql语句的话,有以下两种操作:第一种把<root level="INFO">改成<root level="DEBUG">这样就会打印sql,不过这样日志那边会出现很多其他消息
第二种就是单独给mapper下目录配置DEBUG级别:
例如: <logger name="com.*.mapper" level="DEBUG"/>
或者在配置文件中配置: logging.level.com.*.mapper=DEBUG,这样配置sql语句会打印,其他还是正常INFO级别:
-->
<springProfile name="!production">
<!-- configuration to be enabled when the "production" profile is not active -->
</springProfile>
<!--开发环境-->
<springProfile name="dev|test">
<!--单独设置mapper包下的日志级别为TRACE,因为输出执行的sql需妥DEBUG级别,TRACE级别小于DEBUG,设置为TRACE级别同时将SQL执行结果输出-->
<logger name="com.trans.*.mapper" level="TRACE">
<appender-ref ref="file_sql"/>
</logger>
<!-- root节点是必选节点,用来指定最基础的日志输出级别,只有一个level屡性
level:指定打印级别,大小写无关: TRACE, DEBUG, INFO,WARN,ERROR,ALL 和OFF,默认是DEBUG可以包含零个或多个appender元素 -->
<!--系统操作日志-->
<root level="info">
<appender-ref ref="console" />
<appender-ref ref="file_info" />
<appender-ref ref="file_error" />
<appender-ref ref="file_sql" />
<!--<appender-ref ref="stash"/>-->
</root>
</springProfile>
<!--生产环境-->
<springProfile name="prod">
<!--单独设置mapper包下的日志级别为DEBUG,因为输出执行的sql需要DEBUG级别-->
<logger name="com.trans.*.mapper" level="DEBUG">
<appender-ref ref="file_sql"/>
</logger>
<root level="info">
<appender-ref ref="console" />
<appender-ref ref="file_info" />
<appender-ref ref="file_error" />
<appender-ref ref="file_sql" />
<!--<appender-ref ref="stash"/>-->
</root>
</springProfile>

</configuration>

spring_boot_logback详解
http://hanqichuan.com/2022/05/30/spring/spring_boot_logback详解/
作者
韩启川
发布于
2022年5月30日
许可协议