可以在关键业务开始的时候标记一个锚点,结束的时候删除锚点。
关键业务中间,如果出错了(调用了 log.error )那么这个 log 框架会自动把锚点后的 log level 从 info 改成 debug ,然后重新打印出来。
1
crysislinux 82 天前 via Android
这要有统一的拦截器的框架才能做的优美。而且性能损耗也不小,你的提前把 debug 的内容就记录了才行。我在 nestjs 里做了个类似的功能,应用收集详细的 log 但是不打印,出错的时候就把当前 request 所有的 log 全打印出来
|
2
mark2025 82 天前
openTelemtry 可以把日志打到追踪链路中
|
3
justNoBody 81 天前
我觉得绝大多数情况下,一个好的 error 日志是可以支撑问题排查的。OP 能否具体发一下代码,看看是不是真的需要你说的这个逻辑
|
4
chenliang0571 OP @justNoBody 没有具体的代码,就是一个想法。
跑到 catch 或者 throw 的时候很多变量都访问不到了,所以这时候的 error 日志会有缺失。 这时候经过基本的分析,一般会尝试在本地 DEBUG 重现。 重现不了的,还可能会尝试在生产环境开 DEBUG 或者加 log 解决。 如果 log 能回溯的的话,感觉能省很多事。 |
5
justNoBody 81 天前
@chenliang0571 我的做法是在 error 日志中,把所有我复现需要的参数全部加上。
|
6
ForMrFang 80 天前
早期有个想法是,用线程局部变量(ThreadLocal) 记录这一段区间的信息, 由切面处理 ThreadLocal 的记录和清除
|