继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

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

廖师兄
关注TA
已关注
手记 14
粉丝 2.3万
获赞 1688
需求
  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里做了如下过滤

    <level>ERROR</level>
    <onMatch>DENY</onMatch>
    <onMismatch>ACCEPT</onMismatch>

上述代码翻译之后:拦截ERROR级别的日志。如果匹配到了,则禁用处理。如果不匹配,则接受,开始处理日志。

那有的同学要问了,不能这样写吗

<level>INFO</level>

这样不是只拦截INFO日志了吗?
不对!
这就得说一下日志级别了
DEBUG ->INFO -> WARN ->ERROR

如果你设置的日志级别是INFO,那么是会拦截ERROR日志的哦。

打开App,阅读手记
86人推荐
发表评论
随时随地看视频慕课网APP

热门评论

微服务的课程大概什么时候上线

师兄,你好,要是想在当天的日志名中加入日期,应该怎么写?

我的console不起作用 但是没有报错

查看全部评论