SpringBoot使用logback实现日志按天滚动

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq496013218/article/details/75145537
需求
  1. 日志按天滚动分割
  2. info和error日志输出到不同文件
为什么使用Logback

在这里,我不去深究的讨论各个日志框架的优劣,网上的对比文章实在太多了。我只说以下几点理由。

  1. Logback是Log4j的升级版,作者为同一个人,作者不想再去改Log4j,所以写了Logbak
  2. 使用日志框架的最佳实践是选择一款日志门面+一款日志实现,这里选择Slf4j+Logback, Slf4j作者也是Logbak的作者
  3. SpringBoot从1.4版本开始,内置的日志框架就是Logback
Logback在SpringBoot中配置方式一

可以直接在applicatin.properties或者application.yml中配置
以在application.yml中配置为例:

logging: 
  pattern: 
    console: "%d - %msg%n" 
  file: /var/log/tomcat/sell.log 
  level: com.imooc.LoggerTest: debug

可以发现,这种配置方式简单,但能实现的功能也很局限,只能

  • 定制输出格式
  • 输出文件的路径
  • 指定某个包下的日志级别

如果需要完成我们的需求,这就得用第二种配置了

Logback在SpringBoot中配置方式二

在resource目录下新建logback-spring.xml, 内容如下:

<?xml version="1.0" encoding="utf-8"?>
<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

  1. 因为要把info和error日志输入到不同文件, 所以我们分别建了两个appender。
  2. rollingPolicy是滚动策略,这里我们设置按时间滚动
  3. filter是日志的过滤方式,我们在fileInfoLog里做了如下过滤

<?xml version="1.0"?>
<level>ERROR</level>
<onMatch>DENY</onMatch>
<onMismatch>ACCEPT</onMismatch>
上述代码翻译之后:拦截ERROR级别的日志。如果匹配到了,则禁用处理。如果不匹配,则接受,开始处理日志。
那有的同学要问了,不能这样写吗
<level>INFO</level>
这样不是只拦截INFO日志了吗?
不对!
这就得说一下日志级别了
DEBUG ->INFO -> WARN ->ERROR
如果你设置的日志级别是INFO,那么是会拦截ERROR日志的哦。


阅读更多
换一批

没有更多推荐了,返回首页