找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 258012|回复: 0

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

[复制链接]

该用户从未签到

发表于 2020-12-7 23:05:52 | 显示全部楼层 |阅读模式

您需要 登录 才可以下载或查看,没有账号?立即注册

×
日志重复记录不但给查看日志和统计工作带来不必要的麻烦,还会增加磁盘和日志收集系统的负担。
logger配置继承关系导致日志重复记录
[list,
[*,定义一个方法实现debug、info、warn和error四种日志的记录
[*,Logback配置
[*,配置看没啥问题,执行方法后出现日志重复记录
[*,分析
CONSOLE这个Appender同时挂载到了俩Logger,定义的和,由于定义的继承自,所以同一条日志既会通过logger记录,也会发送到root记录,因此应用package下日志出现重复记录。
[/list,如此配置的初衷是啥呢?
内心是想实现自定义logger配置,让应用内的日志暂时开启DEBUG级别日志记录。其实,这无需重复挂载Appender,去掉下挂载的Appender即可:
若自定义需把日志输出到不同Appender:
比如
[list,
[*,应用日志输出到文件app.log
[*,其他框架日志输出到控制台
[/list,可设置的additivity属性为false,这就不会继承的Appender


                               
登录/注册后可看大图

错误配置LevelFilter造成日志重复
[list,
[*,在记录日志到控制台的同时,把日志记录按照不同级别记录到俩文件
[*,执行结果
[*,info.log 文件包含INFO、WARN和ERROR三级日志,不符预期
[*,error.log包含WARN和ERROR俩级别日志,导致日志重复收集
[*,事故问责
一些公司使用自动化ELK方案收集日志,日志会同时输出到控制台和文件,开发人员在本地测试不会关心文件中记录的日志,而在测试和生产环境又因为开发人员没有服务器访问权限,所以原始日志文件中的重复问题难以发现。
[/list,日志到底为何重复呢?
ThresholdFilter源码解析
[list,
[*,当日志级别 ≥ 配置级别 返回NEUTRAL,继续调用过滤器链上的下个过滤器
[*,否则返回DENY,直接拒绝记录日志
[/list,该案例我们将 ThresholdFilter 置 WARN,因此可记录WARN和ERROR级日志。
LevelFilter
用于比较日志级别,然后进行相应处理。
[list,
[*,若匹配就调用onMatch定义的处理方式:默认交给下一个过滤器处理(AbstractMatcherFilter基类中定义的默认值)
[*,否则调用onMismatch定义的处理方式:默认也是交给下一个过滤器
[/list,

                               
登录/注册后可看大图


                               
登录/注册后可看大图

和ThresholdFilter不同,LevelFilter仅配置level无法真正起作用。
由于未配置onMatch和onMismatch属性,所以该过滤器失效,导致INFO以上级别日志都记录了。
修正
配置LevelFilter的onMatch属性为ACCEPT,表示接收INFO级别的日志;配置onMismatch属性为DENY,表示除了INFO级别都不记录:


                               
登录/注册后可看大图

如此,_info.log文件只会有INFO级日志,不会再出现日志重复。
你认为华为程序员该不该辞退?

2020-12-07 PK进行中 3人
[list=1,
[*,1. 自己的错误给工作带来不必要的麻烦 67%


[*,2. 事情没有严重到辞退的地步 33%


[/list,
回复

使用道具 举报

网站地图|页面地图|文字地图|Archiver|手机版|小黑屋|找资源 |网站地图

GMT+8, 2024-11-22 18:48

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表