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