乐趣区

关于程序员:程序员因重复记录日志撑爆ELK被辞退

因为日志配置繁冗,很多同学喜爱间接 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????

退出移动版