if (level.isGreaterOrEqual(Level.WARN) || sampler.trySample()) {
append(event);
}
开了 10% 采样后,一天里 6 次支付失败的日志一条都没留下,同一时段的普通请求日志倒是采到了不少。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。
原因不复杂,采样在 appender 层按请求随机丢,没有给 ERROR 级别开口子。错误日志量本来就小,用同一采样率等于按比例抹掉。
「日志采样误删」排查到最后往往是很小的一处差异,前面那些复杂猜测可以先放一放。改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。
验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。
处理上按这个顺序:错误和警告级别不走采样 全量保留;只对 info 和 debug 做采样 并按 traceId 保证同一请求要么全留要么全丢;采样率做成可配 大促时临时调低;核对采样后错误条数和监控计数。
改完只确认一件事:支付失败六次全部能在日志里找到 普通日志量下降九成。
