java 源码欣赏,Logback源码赏析-日志按时间滚动(切割)

引言

用过Logback的同学们大多都知道Logback日志框架可以自动按照某个时间点切割日志的功能。但了解其中工作原理的同学可能并不是很多。楼主今天就带领各位了解一下其中的核心源码。本文的示例引用了Logback 1.1.7版的源码。

举个实际的例子,如果希望某一个Appender按天切割日志,那么我们需要类似如下的配置:

logs/service-log.log

%d{yyyy-MM-dd HH:mm:ss} %level [%class:%line] - %m%n

logs/service-log.%d{yyyy-MM-dd}.log.zip

如果需要日志切割功能,首先要选用RollingFileAppender这种Appender,之后要配置TimeBasedRollingPolicy作为该Appender的滚动策略。

源码解读

业务代码在调用Logback的记录日志的方法时,Logger类会调用ch.qos.logback.core.Appender#doAppend方法。Appender的doAppend就是Appender记录日志功能的入口。

我们先来看一下RollingFileAppender的继承关系

bVIxKo?w=814&h=700

看起来貌似有些晕。没关系,doAppend方法经过几层之后会调到ch.qos.logback.core.rolling.RollingFileAppender#subAppend 这个方法。而跟日志切割相关的逻辑就在这里面。因此从doAppend到subAppend之间的调用链路我们在此略过不提,而是从subAppend这个方法切入。

/**

* This method differentiates RollingFileAppender from its super class.

*/

@Override

protected void subAppend(E event) {

// The roll-over check must precede actual writing. This is the

// only correct behavior for time driven triggers.

// We need to synchronize on triggeringPolicy so t

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值