背景:
日常打印日志时,使用logback的异步写日志几乎是标准的配置方式,本文从源码上看看异步写日志的整个流程
异步Appender日志
一般日志的配置如下所示
appender("ASYNC-LOG", AsyncAppender) {
neverBlock = true
queueSize = 10000
}
这样配置达到的效果有以下两点:
1.新来的是warn/error级别的日志,并且此时日志总数已经达到最大容量上限queueSize大小时,不会阻塞业务线程,而是选择丢弃日志,这样可以防止打印尖峰式打印日志时业务线程阻塞,不过会导致日志丢失
2.新来的是info/debug/trace级别的日志,当此时的日志总数已经达到最大容量上限queueSize的80%时,直接丢掉日志,也就是说对于这些低级别的日志,当达到最大阈值上限的80%时已经开始丢弃了
对着源码,我们来看一下这两个结论对应的代码段是什么:
1.初始化队列和丢弃阈值
2.日志消息插入