Обогатить операторы журнала Seq свойствами, не включая их в строку сообщения (используя Serilog) - PullRequest
0 голосов
/ 14 ноября 2018

Я использую Serilog с Seq и хочу обогатить протоколирование, которое появляется в Seq, моими собственными свойствами.

Если я введу оператор журнала, например ...

Log.Information("ProcessCycle {Site} {Activity}", SiteName, ActivityName);

InSeq I get ...

enter image description here

Обратите внимание, что значения Site и Activity отображаются как расширенные свойства в Seq, но они также отображаются в общем сообщении.

Как мне войти, где я получаю обогащенные свойства, но не могу ли значения отображаться в строке текстового сообщения?Обратите внимание, у меня есть пакет NuGet, который добавляет ThreadId к каждому вызову.Я хочу, чтобы свойства «Сайт» и «Активность» находились в списке обогащенных объектов, но не обязательно печатались в строке сообщения.

Для ответа на этот вопрос может также потребоваться понимание нашего приложения.

Приложение представляет собой службу Windows, которая порождает несколько действий, которые делают разные вещи.Таким образом, служба Windows управляет различными действиями, содержащимися внутри.По расписанию он просто вызывает «Процесс» в каждом действии, чтобы отключиться и выполнить некоторую работу.Каждый раз, когда Process вызывается orchestrater, мне нужно, чтобы вся регистрация в этом Activity автоматически включала значения Site и Activity, как показано выше (наряду со многими другими значениями свойств, но я не хочу, чтобы все это печаталось в строке сообщения).

Таким образом, вместо вышеприведенной записи вместо этого мы увидим ... Обратите внимание, что сообщение теперь читается просто "ProcessCycle".

enter image description here

1 Ответ

0 голосов
/ 16 ноября 2018
Log.Information("ProcessCycle {Site} {Activity}", SiteName, ActivityName);

Необходимо изменить на:

Log.ForContext("Site",SiteName)
    .ForContext("Activity",ActivityName)
    .Information("ProcessCycle")

Для рендеринга по вашему желанию.

Вы также можете сделать Enrich.FromLogContext и LogContext.PushProperty, чтобы сделать это более глобально.(найдите эти две строки, чтобы найти пример).

Добавлено Джоном Ливермором

Более подробную информацию о FromLogContext и других методах можно найти по адресу ... https://nblumhardt.com/2016/08/context-and-correlation-structured-logging-concepts-in-net-5/

FromLogContext создает ILogger, который можно использовать в области видимости для последующих вызовов регистрации.

...