有没有办法在节奏工作流中使用“ zerolog”记录器而不是“ zap”记录器?

问题描述

我知道Cadence使用它自己的内部未导出的context。由于workflow.Contextcontext.Context之间没有转换,因此很难从中获取值。但是也许还有另一种我忽略的方法。

解决方法

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

,

在Cadence中,您可以使用在Activity中喜欢的任何记录器,包括zerolog。例如,我们在Cadence系统worker中使用了自己的幻想记录器: 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()”。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...