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

关于 go 日志中记录 request id 的疑问

  •  
  •   fxjson · 77 天前 via Android · 829 次点击
    这是一个创建于 77 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一直有个疑问,go 业务日志中怎么在一个请求的每一条日志中记录当次请求的一个唯一请求 id ,方便根据这个唯一标识过滤所有的当次请求的日志,从而更快排查问题。知道一种比较麻烦的方式,在请求的 context 中灌入这个唯一 id,然后在各个方法中都需要参数 context ,这样在各个方法想记录日志,再从 cotext 中拿 id,这方式不优雅啊,有啥好方法吗?

    looking0truth
        1
    looking0truth  
       77 天前
    貌似必须透传
    0987363
        2
    0987363  
       77 天前
    http 框架的 middleware 里初始化日志的时候加上 id
    fxjson
        3
    fxjson  
    OP
       77 天前 via Android
    @0987363 你的意思应该也是每个方法透传 context ,从 context 里面接收唯一标识
    to2false
        4
    to2false  
       77 天前
    你的 log 组件封装个方法 `withCtx(ctx context.Context)`然后内部自己获取就好了
    toomoy
        6
    toomoy  
       77 天前
    nginx 生成个请求标识
    SimbaPeng
        7
    SimbaPeng  
       77 天前
    把带上各种基础字段的 logger 对象传入 context ,下层方法用的都是上层传下来带上了各种基础字段的 logger
    fxjson
        8
    fxjson  
    OP
       77 天前 via Android
    @to2false 那还是要各个方法传递 ctx 才能 withCtx,从而所有日志才能有这个唯一标识
    ArianX
        9
    ArianX  
       77 天前 via Android
    middleware 在 ctx 中设置一个 id ,处理请求的整个链路都需要带上这个 ctx 。用公共的日志库提供打日志的方法,日志库封装从 ctx 把 id 取出来的逻辑
    joesonw
        10
    joesonw  
       77 天前 via iPhone
    从 ctx 上拿 logger ,这样除了 reqeust id 以外,后面要注入其他变量,其他地方不用动。
    king888
        11
    king888  
       77 天前
    在代码打日志哪里要用到 requestId 就在那处调用,不是很正常的一件事情,为什么这种方法不优雅
    sardina
        12
    sardina  
       77 天前
    把当前的 goroutinue id 和 request id 关联起来,然后打日志的时候通过取当前的 goroutinue id 来打印 request id 。
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2181 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 44ms · UTC 16:35 · PVG 00:35 · LAX 08:35 · JFK 11:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.