有没有一个 log 框架,在 log.error 的时候自动重新打印某段时间内的详细 log

31 天前
 chenliang0571

可以在关键业务开始的时候标记一个锚点,结束的时候删除锚点。

关键业务中间,如果出错了(调用了 log.error )那么这个 log 框架会自动把锚点后的 log level 从 info 改成 debug ,然后重新打印出来。

1087 次点击
所在节点    程序员
6 条回复
crysislinux
31 天前
这要有统一的拦截器的框架才能做的优美。而且性能损耗也不小,你的提前把 debug 的内容就记录了才行。我在 nestjs 里做了个类似的功能,应用收集详细的 log 但是不打印,出错的时候就把当前 request 所有的 log 全打印出来
mark2025
31 天前
openTelemtry 可以把日志打到追踪链路中
justNoBody
30 天前
我觉得绝大多数情况下,一个好的 error 日志是可以支撑问题排查的。OP 能否具体发一下代码,看看是不是真的需要你说的这个逻辑
chenliang0571
30 天前
@justNoBody 没有具体的代码,就是一个想法。

跑到 catch 或者 throw 的时候很多变量都访问不到了,所以这时候的 error 日志会有缺失。

这时候经过基本的分析,一般会尝试在本地 DEBUG 重现。
重现不了的,还可能会尝试在生产环境开 DEBUG 或者加 log 解决。

如果 log 能回溯的的话,感觉能省很多事。
justNoBody
30 天前
@chenliang0571 我的做法是在 error 日志中,把所有我复现需要的参数全部加上。
ForMrFang
29 天前
早期有个想法是,用线程局部变量(ThreadLocal) 记录这一段区间的信息, 由切面处理 ThreadLocal 的记录和清除

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1066285

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX