Есть ли способ использовать регистратор zerolog в рабочих процессах каденции вместо регистратора zap?

Я знаю, что Cadence использует собственные внутренние неэкспортируемые context. Это затрудняет получение значений из него, поскольку нет преобразования между workflow.Context и context.Context. Но, возможно, я упускаю из виду еще один способ.


person Vardan Saakian    schedule 22.09.2020    source источник


Ответы (2)


Я не думаю, что это возможно в Cadence. В Temporal вы можете вводить любые зависимости с помощью noreceptors> >. Также Temporal переключил регистратор на интерфейс . , так что вы можете использовать открытый интерфейс и написать адаптер для регистратора zerolog.

person Maxim Fateev    schedule 24.09.2020
comment
Я закончил с решением адаптера, извлекающего желаемые значения из workflow.Context и добавляющего их как поля 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 ().

person Long Quanzheng    schedule 27.09.2020