Я знаю, что Cadence использует собственные внутренние неэкспортируемые context
. Это затрудняет получение значений из него, поскольку нет преобразования между workflow.Context
и context.Context
. Но, возможно, я упускаю из виду еще один способ.
Есть ли способ использовать регистратор zerolog в рабочих процессах каденции вместо регистратора zap?
Ответы (2)
Я не думаю, что это возможно в Cadence. В Temporal вы можете вводить любые зависимости с помощью noreceptors> >. Также Temporal переключил регистратор на интерфейс . , так что вы можете использовать открытый интерфейс и написать адаптер для регистратора zerolog.
zerolog
- person Vardan Saakian; 08.10.2020
В 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 вам нужно реализовать интерфейс zap.Core
и передать его при создании worker. Другими словами, вы можете реализовать это с помощью zerolog
. Но вы не можете напрямую использовать его в коде рабочего процесса. Вы должны использовать workflow.GetLogger ().