1

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

4

2 回答 2

0

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

于 2020-09-24T04:18:54.143 回答
0

在 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()”。

于 2020-09-27T18:55:03.613 回答