banner
NEWS LETTER

logback日志配置

Scroll down

logback日志配置

springboot自带logback,所以可以不用添加依赖但是至少得有:

1
2
3
4
5
6
7
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.2.RELEASE</version>
<relativePath/>
<!-- lookup parent from repository -->
</parent>

日志级别从高到低:TRACE < DEBUG < INFO < WARN < ERROR < FATAL

  1. Logback 首先加载配置文件logback-test.xml

  2. 如果没找到,就加载 logback.groovy

  3. 如果还没找到,就加载 logback.xml

  4. 如果还没找到,就使用默认配置。

    建议安装lombok,可以通过注解@Slf4j引入log,不用在

    private static final Logger log = LoggerFactory.getLogger(xxxx.class);

    以下配置info,debug,error三个日志.log,以及还有对应的html,此外还配置的滚动日志。

logback.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
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
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
<?xml version="1.0" encoding="utf-8" ?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!--日志级别 trace<debug<info<warn<error
若日志级别为info,则不会打印trace和debug-->
<!--定义全局常量参数-->
<property name="log.level" value="debug"/>
<property name="log.maxHistory" value="30"/><!--30表示30个-->
<!--日志的存放位置-->
<property name="log.filePath" value="${catalina.base}/logs/webapps"/>
<!--日志的展现格式-->
<property name="log.pattern" value="%d{yyyy-MM-dd:HH:mm:ss.SSS} [%thread] %-5level %logger{50}-%msg%n"/>
<!--日志风格-->
<property name="CONSOLE_LOG_PATTERN"
value="%red(%date{yyyy-MM-dd HH:mm:ss}) %highlight(%-5level) %red([%thread]) %boldMagenta(%logger{50}) %cyan(%msg%n)"/>

<!--定义appender(日志的输出存在位置)-->
<!--控制台设置-->
<appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${CONSOLE_LOG_PATTERN}</pattern><!--日志文件中日志格式-->
</encoder>
</appender>

<!--DEBUG-->
<appender name="debugAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"><!--日志输出会滚动-->
<!--文件路径-->
<file>${log.filePath}/debug.log</file> <!--当前日志文件存放位置-->
<!--日志滚动策略-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--历史日志文件的保存路径和名称-->
<fileNamePattern>${log.filePath}/debug/debug.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
<!--日志文件最大的保存数量-->
<MaxHistory>${log.maxHistory}</MaxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${log.pattern}</pattern><!--日志文件中日志格式-->
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>DEBUG</level>
<onMatch>ACCEPT</onMatch><!--用过滤器,只接受DEBUG级别的日志信息,其余全部过滤掉-->
<onMismatch>DENY</onMismatch>
</filter>
<!--日志文件最大的大小,默认是10MB,超过这个就会备份为一个压缩文件 -->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender>

<!--DEBUG html格式的日志 -->
<appender name="DebugHtml" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--文件路径-->
<file>${log.filePath}/html/debug.html</file> <!--当前日志文件存放位置-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名 -->
<fileNamePattern>${log.filePath}/html/debug/debug.%d{yyyy-MM-dd}.html.gz</fileNamePattern>
<!--日志文件保留天数 -->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="ch.qos.logback.classic.html.HTMLLayout">
<pattern>%p%d%msg%M%F{32}%L</pattern>
</layout>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>DEBUG</level>
<onMatch>ACCEPT</onMatch><!--用过滤器,只接受DEBUG级别的日志信息,其余全部过滤掉-->
<onMismatch>DENY</onMismatch>
</filter>
<!--日志文件最大的大小 -->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender>

<!--INFO-->
<appender name="infoAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"><!--日志文件会滚动-->
<!--文件路径-->
<file>${log.filePath}/info.log</file> <!--当前日志文件存放位置-->
<!--日志滚动策略-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--历史日志文件的保存路径和名称-->
<fileNamePattern>${log.filePath}/info/info.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
<!--日志文件最大的保存数量-->
<MaxHistory>${log.maxHistory}</MaxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${log.pattern}</pattern><!--日志文件中日志格式-->
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch><!--用过滤器,只接受INFO级别的日志信息,其余全部过滤掉-->
<onMismatch>DENY</onMismatch>
</filter>
<!--日志文件最大的大小,默认是10MB,超过这个就会备份为一个压缩文件 -->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender>

<!-- INFO html格式的日志 -->
<appender name="InfoHtml" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--文件路径-->
<file>${log.filePath}/html/info.html</file> <!--当前日志文件存放位置-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名 -->
<fileNamePattern>${log.filePath}/html/info/info.%d{yyyy-MM-dd}.html.gz</fileNamePattern>
<!--日志文件保留天数 -->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="ch.qos.logback.classic.html.HTMLLayout">
<pattern>%p%d%msg%M%F{32}%L</pattern>
</layout>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch><!--用过滤器,只接受INFO级别的日志信息,其余全部过滤掉-->
<onMismatch>DENY</onMismatch>
</filter>
<!--日志文件最大的大小 -->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender>

<!--ERROR-->
<appender name="errorAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"><!--日志输出会滚动-->
<!--文件路径-->
<file>${log.filePath}/error.log</file> <!--当前日志文件存放位置-->
<!--日志滚动策略-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--历史日志文件的保存路径和名称-->
<fileNamePattern>${log.filePath}/error/error.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
<!--日志文件最大的保存数量-->
<MaxHistory>${log.maxHistory}</MaxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${log.pattern}</pattern><!--日志文件中日志格式-->
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch><!--用过滤器,只接受ERROR级别的日志信息,其余全部过滤掉-->
<onMismatch>DENY</onMismatch>
</filter>
<!--日志文件最大的大小,默认是10MB,超过这个就会备份为一个压缩文件 -->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender>

<!--ERROR html格式的日志 -->
<appender name="ErrorHtml" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--文件路径-->
<file>${log.filePath}/html/error.html</file> <!--当前日志文件存放位置-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名 -->
<fileNamePattern>${log.filePath}/html/error/error.%d{yyyy-MM-dd}.html.gz</fileNamePattern>
<!--日志文件保留天数 -->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="ch.qos.logback.classic.html.HTMLLayout">
<pattern>%p%d%msg%M%F{32}%L</pattern>
</layout>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch><!--用过滤器,只接受ERROR级别的日志信息,其余全部过滤掉-->
<onMismatch>DENY</onMismatch>
</filter>
<!--日志文件最大的大小 -->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender>

<!--logger标签用于和appender进行绑定,告诉logback哪些包(name属性)的日志信息需要记录-->
<!--logger标签将会继承root标签,加上additivity="true"的属性后root标签中level将会被logger的level覆盖-->
<logger name="com.ams" level="%{log.level}" additivity="true">
<!--level表示只会记录那个级别以上的日志-->
<!--与appender进行绑定-->
<appender-ref ref="debugAppender"/>
<appender-ref ref="infoAppender"/>
<appender-ref ref="errorAppender"/>
<appender-ref ref="DebugHtml"/>
<appender-ref ref="InfoHtml"/>
<appender-ref ref="ErrorHtml"/>
</logger>

<root level="INFO">
<appender-ref ref="consoleAppender"/>
</root>
</configuration>
其他文章