V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
chenliang0571
V2EX  ›  程序员

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

  •  
  •   chenliang0571 · 31 天前 · 1086 次点击

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

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

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

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

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

    如果 log 能回溯的的话,感觉能省很多事。
    justNoBody
        5
    justNoBody  
       30 天前
    @chenliang0571 我的做法是在 error 日志中,把所有我复现需要的参数全部加上。
    ForMrFang
        6
    ForMrFang  
       29 天前
    早期有个想法是,用线程局部变量(ThreadLocal) 记录这一段区间的信息, 由切面处理 ThreadLocal 的记录和清除
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1546 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 16:59 · PVG 00:59 · LAX 09:59 · JFK 12:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.