因为日志配置繁冗,很多同学喜爱间接cv其余我的项目或网上博客的配置文件,而不认真钻研每个配置项。最常见的就是重复记录日志,这岂但给查看和统计带来不必要麻烦,还会减少磁盘和日志收集零碎累赘。
上面看几个常见导致该谬误的案例,大家引以为戒,防止被解雇。
1 logger配置继承关系谬误
定义方法记录debug、info、warn、error四种日志:
Logback配置
配置看没啥问题,但执行办法后显著记录反复了:
错因
CONSOLE这个Appender同时挂载到俩Logger,定义的<logger>
和<root>
,因为定义的<logger>
继承自<root>
,所以同一日志既会通过logger记录,也会发送到root记录,因而利用包下日志呈现反复。
如此配置的初衷是啥?
本想实现自定义logger配置,让利用内日志临时开启DEBUG级别。
其实,这无需反复挂载Appender,去掉<logger>
下挂载的Appender即可
<logger name="org.javaedge.logging" level="DEBUG"/>
若自定义<logger>
需把日志输入到不同Appender,比方
- 利用日志输入到文件app.log
- 其余框架日志输入到控制台
可设置<logger>
的additivity属性为false,就不会继承<root>
Appender
2 配置LevelFilter谬误
记录日志到控制台时,将日志按级别记录到俩文件
执行后果
- info.log 文件蕴含INFO、WARN和ERROR三级日志,不符预期
- error.log蕴含WARN和ERROR俩级别日志,导致日志反复收集
事变问责
一些公司应用自动化ELK计划收集日志,日志会同时输入到控制台和文件,开发人员在本地测试不会关怀文件中记录的日志,而在测试和生产环境又因为开发人员没有服务器拜访权限,所以原始日志文件中的反复问题难以发现。
到底为何反复?
ThresholdFilter源码解析
- 当
日志级别 ≥ 配置级别
返回NEUTRAL,持续调用过滤器链上的下个过滤器 - 否则返回DENY,间接回绝记录日志
该案例咱们将 ThresholdFilter 置 WARN,因而可记录WARN和ERROR级日志。
LevelFilter
用于比拟日志级别,而后进行相应解决。
- 若匹配就调用onMatch定义的解决形式:默认交给下一个过滤器解决(AbstractMatcherFilter基类中定义的默认值)
- 否则调用onMismatch定义的解决形式:默认也是交给下一个过滤器
和ThresholdFilter不同,LevelFilter仅配置level无奈真正起作用
。
因为未配置onMatch和onMismatch属性,所以该过滤器生效,导致INFO以上级别日志都记录了。
修改
配置LevelFilter的onMatch属性为ACCEPT,示意接管INFO级别的日志;配置onMismatch属性为DENY,示意除了INFO级别都不记录:
如此,_info.log
文件只会有INFO级日志,不会再呈现日志反复。
举荐浏览
为什么阿里巴巴的程序员成长速度这么快,看完他们的内部资料我懂了
字节跳动总结的设计模式 PDF 火了,完整版凋谢下载
刷Github时发现了一本阿里大神的算法笔记!标星70.5K
程序员50W年薪的常识体系与成长路线。
月薪在30K以下的Java程序员,可能听不懂这个我的项目;
字节跳动总结的设计模式 PDF 火了,完整版凋谢分享
对于【暴力递归算法】你所不晓得的思路
开拓鸿蒙,谁做零碎,聊聊华为微内核
=
看完三件事❤️
如果你感觉这篇内容对你还蛮有帮忙,我想邀请你帮我三个小忙:
点赞,转发,有你们的 『点赞和评论』,才是我发明的能源。
关注公众号 『 Java斗帝 』,不定期分享原创常识。
同时能够期待后续文章ing????