Написание структурированных журналов с Serilog

Я попробовал следующий журнал с Serilog:

this.logger.Debug("Incoming metrics data {ClientId}", new { clientid = 54732 });

Serilog произвел этот вывод:

Incoming metrics data "{ clientid = 54732 }"

Serilog - структурированный логгер, я ожидал, что он выдаст что-то вроде этого:

Incoming metrics data {ClientId}, {clientId: 54732}

Я делаю что-то не так или я неправильно понимаю Serilog / структурированное ведение журнала?

1 ответ

Две вещи; во-первых, чтобы сериализовать такую ​​структуру, вам нужно использовать оператор захвата структуры @:

this.logger.Debug("Incoming metrics data {@Client}", new { ClientId = 54732 });

Это захватит отдельные свойства переданного объекта, поэтому событие в переписанном примере будет иметь Client собственность с ClientId суб-недвижимость.

Это даст вам вывод, как:

Incoming metrics data {"ClientId": 54732}

(Предполагается, что вы используете последний консольный приемник Serilog с шаблоном по умолчанию; другие конфигурации могут не печатать внедренные данные в стиле JSON.)

Второе соображение заключается в том, что полная структура события не показана в текстовом выводе Serilog - это "дружественное к человеку" лицо Serilog. Если вы хотите записать структуру, вы можете подключить CompactJsonFormatter вот так (опять же при условии консольной раковины):

.WriteTo.Console(new CompactJsonFormatter())

Это работает и для файлов и т. Д. - подробности на https://github.com/serilog/serilog-formatting-compact.

Другие вопросы по тегам