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

开发 项目管理
由于日志配置繁杂,很多同学喜欢直接cv其他项目或网上博客的配置文件,而不仔细研究每个配置项。最常见的就是重复记录日志,这不但给查看和统计带来不必要麻烦,还会增加磁盘和日志收集系统负担。

[[356982]]

由于日志配置繁杂,很多同学喜欢直接cv其他项目或网上博客的配置文件,而不仔细研究每个配置项。最常见的就是重复记录日志,这不但给查看和统计带来不必要麻烦,还会增加磁盘和日志收集系统负担。

下面看几个常见导致该错误的案例,大家引以为戒,避免被辞退。

1 logger配置继承关系错误

图片

定义方法记录debug、info、warn、error四种日志:

Logback配置

配置看没啥问题,但执行方法后明显记录重复了:

错因

CONSOLE这个Appender同时挂载到俩Logger,定义的,由于定义的继承自,所以同一日志既会通过logger记录,也会发送到root记录,因此应用包下日志出现重复。

如此配置的初衷是啥?

本想实现自定义logger配置,让应用内日志暂时开启DEBUG级别。

其实,这无需重复挂载Appender,去掉下挂载的Appender即可

  1. <logger name="org.javaedge.logging" level="DEBUG"/> 

若自定义需把日志输出到不同Appender,比如

  • 应用日志输出到文件app.log
  • 其他框架日志输出到控制台

可设置的additivity属性为false,就不会继承 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级日志,不会再出现日志重复。

本文转载自微信公众号「 JavaEdge」,可以通过以下二维码关注。转载本文请联系 JavaEdge公众号。

 

责任编辑:武晓燕 来源: JavaEdge
相关推荐

2018-09-12 14:58:54

程序员年纪大辞退

2021-12-28 10:19:26

程序员技能开发者

2019-02-14 10:04:34

程序员离职技术

2010-10-13 17:13:17

MySQL重复记录

2010-10-13 17:07:46

MySQL删除重复记录

2021-09-29 09:07:22

Docker 日志容器

2010-11-25 15:43:02

MYSQL查询重复记录

2010-09-25 16:17:25

SQL语句

2014-08-29 11:09:44

程序员

2010-11-23 14:26:02

MySQL删除重复记录

2010-10-27 16:49:23

Oracle删除重复记

2010-10-27 16:56:05

Oracle重复记录

2018-10-10 15:52:48

程序员代码编程

2015-03-18 09:51:45

2013-06-09 13:24:00

程序员Bug

2009-05-08 08:34:58

中关村MSN辞退

2019-07-02 09:30:31

程序员劳动陷阱

2010-09-28 15:46:22

SQL删除重复记录

2010-09-28 15:40:51

SQL删除重复记录

2019-08-08 16:14:19

腾讯程序员辞退
点赞
收藏

51CTO技术栈公众号