• 请不要在回答技术问题时复制粘贴 AI 生成的内容
fxjson
V2EX  ›  程序员

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

  •  
  •   fxjson · Sep 17, 2022 via Android · 3029 views
    This topic created in 1511 days ago, the information mentioned may be changed or developed.

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

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