日志是任何一个系统都必备的东西,日志的重要程度丝毫不亚于代码。而springboot中经常使用的是logback,那么今天我们就来学习一下在springboot下如何配置logback日志。理解了这里的配置,对于任何的日志都是一样的。
需求
- 日志按天滚动分割
info
和error
日志输出到不同文件
为什么使用Logback
Logback
是Log4j
的升级版,作者为同一个人,作者不想再去改Log4j
,所以写了Logback
- 使用日志框架的最佳实践是选择一款日志门面+一款日志实现,这里选择
Slf4j
+Logback
,Slf4j
作者也是Logback
的作者
SpringBoot
从1.4版本开始,内置的日志框架就是Logback
Logback在SpringBoot中配置方式一
可以直接在applicatin.properties
或者application.yml
中配置
以在application.yml
中配置为例
1 2 3 4 5 6
| logging: pattern: console: "%d - %msg%n" file: /var/log/tomcat/sell.log level: com.imooc.LoggerTest: debug
|
可以发现,这种配置方式简单,但能实现的功能也很局限,只能
- 定制输出格式
- 输出文件的路径
- 指定某个包下的日志级别
如果需要完成我们的需求,这就得用第二种配置了
Logback在SpringBoot中配置方式二
在resource
目录下新建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
| <configuration> <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender"> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern> %d - %msg%n </pattern> </layout> </appender> <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>DENY</onMatch> <onMismatch>ACCEPT</onMismatch> </filter> <encoder> <pattern> %msg%n </pattern> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>/var/log/tomcat/sell/info.%d.log</fileNamePattern> </rollingPolicy> </appender>
<appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>ERROR</level> </filter> <encoder> <pattern> %msg%n </pattern> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>/var/log/tomcat/sell/error.%d.log</fileNamePattern> </rollingPolicy> </appender>
<root level="info"> <appender-ref ref="consoleLog" /> <appender-ref ref="fileInfoLog" /> <appender-ref ref="fileErrorLog" /> </root>
</configuration>
|
每一个appender
你可以理解为一个日志处理策略。
第一个appender
的name="consoleLog"
,
名字是自己随意取的,取这个名字,表示这个策略用于控制台的日志。
我们重点看第二个和第三个appender
,因为要把info
和error
日志输入到不同文件,所以我们分别建了两个appender
。
rollingPolicy
是滚动策略,这里我们设置按时间滚动
filter
是日志的过滤方式,我们在fileInfoLog
里做了如下过滤
1 2 3
| <level>ERROR</level> <onMatch>DENY</onMatch> <onMismatch>ACCEPT</onMismatch>
|
上述代码翻译之后:拦截ERROR
级别的日志。如果匹配到了,则禁用处理。如果不匹配,则接受,开始处理日志。
那有的同学要问了,不能这样写吗
这样不是只拦截INFO
日志了吗?
不对!
这就得说一下日志级别了
DEBUG
->INFO
-> WARN
->ERROR
如果你设置的日志级别是INFO
,那么是会拦截ERROR
日志的哦。也就是说,如果直接写info
,那么大于等于info
级别的日志都会写进去,违背了我们的需求。
整理自: