目前所有的日志记录方式采用的都是同步的方式,即直接将日志写入文件。
在多应用的时候,这种效果会导致一定的线程运行延迟,所以可以采用异步的方式处理。
logback AsyncAppender 目前在logback 1.0.11及以上版本存在
集成到项目
异步日志记录是在原来logback上的扩展,并不是替代方式,所以只需要在原来的配置文件上添加一下配置
这样你的工程就会使用异步的方式记录日志
异步写日志原理:
ch.qos.logback.classic.AsyncAppender源码
可以配置的项为queueSize,discardingThreshold。
queueSize 默认值256,不过该值首次建议设置大一些,后续根据自己业务的特点去调优。
discardingThreshold:默认情况下,当blockingQueue的容量高于阈值时(80%),会丢弃ERROR一下级别的日志,如果不希望丢弃日志(既每次都是全量保存),那可以设置为0。 如正常日志可以丢弃,那可以极大的提升性能,并保存关键的ERROR日志。
依赖
异步记录并不自己处理写日志,而只是提供了一种异步的方式,最后记录日志还需要到具体的appender上。
以上就是异步日志的工作方式,他内部需要一个具体的appender,所以在配置文件中,需要指出具体的依赖
这样,就能异步的记录到之前的appender上了。
性能
由于我本机配置有限,只能给出一个大概的值,供大家参考
由于需要模拟线上服务处理,因此需要每隔一段时间就暂停一次来模拟服务消耗
测试结果:
同步:6000
异步:5000
实际线上的服务处理时间导致的暂停时间会远远大于模拟时间,因此异步的优势应该更大。