日志是任何一个系统都必备的东西,日志的重要程度丝毫不亚于代码。而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级别的日志都会写进去,违背了我们的需求。
整理自: