【问题标题】:Is there a way to use `zerolog` logger in cadence workflows instead of `zap` logger?有没有办法在节奏工作流程中使用“zerolog”记录器而不是“zap”记录器?
【发布时间】:2020-09-22 12:57:42
【问题描述】:

我知道 Cadence 使用它自己的内部非导出 context。这样就很难从中获取值,因为workflow.Contextcontext.Context 之间没有转换。但也许我忽略了另一种方式。

【问题讨论】:

    标签: logging cadence-workflow temporal-workflow


    【解决方案1】:

    我认为在 Cadence 中是不可能的。在 Temporal 中,您可以使用 interceptors 注入任何依赖项。此外,Temporal 将记录器切换到 interface,因此您可以使用公开的接口并将适配器写入 zerolog 记录器。

    【讨论】:

    • 我最终得到了适配器从 workflow.Context 中提取所需值并将它们添加为 zerolog 字段的解决方案
    【解决方案2】:

    在 Cadence 中,您可以在 Activity 中使用任何您喜欢的记录器,包括 zerolog。例如,我们在 Cadence 系统工作者中使用了我们自己的花哨的记录器: https://github.com/uber/cadence/blob/11547ee6db5dd306cb507b263381a6ea94c3faf1/service/worker/scanner/history/scavenger.go#L34 https://github.com/uber/cadence/blob/11547ee6db5dd306cb507b263381a6ea94c3faf1/service/worker/scanner/history/scavenger.go#L286

    它具有强类型标签,因此人们在放置标签时不会出错。

    但工作流程有所不同。您绝对不能简单地直接在工作流程中使用您自己的记录器。因为工作流程可以随时重播。 Cadence 必须确保在回复期间跳过日志记录。否则你可能会看到奇怪的日志。

    如果您想使用其他记录器,最终会发生什么?当前的答案是您必须实现一个接口。在Cadence 中你需要实现zap.Core 接口,并在创建worker 时传递它。换句话说,您可以使用zerolog 来实现它。但是您不能直接在工作流代码中使用它。您必须使用“workflow.GetLogger()”。

    【讨论】:

      猜你喜欢
      • 2017-12-24
      • 1970-01-01
      • 2020-07-08
      • 2020-12-06
      • 2016-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多