Serilog форматирует только свойства как json

Если у меня есть это:

logger.Information("this is a message with {property_name}", complexObject);

Как я могу сделать его эквивалентным этому:

logger.Information("this is a message with {property_name}", JsonConvert.SerializeObject(complexObject));

person RSxx    schedule 01.12.2019    source источник


Ответы (2)


Если имя свойства начинается с @, то весь граф объекта сохраняется в журнале событий.

logger.Information("this is a message with {@property_name}", complexObject);

Если ваш приемник записывает события журнала в формате JSON, дополнительная работа не требуется, или его можно настроить для этого. Чтобы передать JSON, прочитайте Форматирование JSON.

person Mohsen Esmailpour    schedule 01.12.2019

Согласно ответу Мохсена, в терминах Serilog это называется Деструктуризация: процесс преобразования сложного объекта .NET в структуру, который позже может быть представлен, скажем, в виде объекта JSON или большого двоичного объекта XML.

Сохранение структуры объекта

Есть много мест, где при наличии возможности имеет смысл сериализовать свойство события журнала как структурированный объект. DTO (объекты передачи данных), сообщения, события и модели часто лучше регистрировать, разбивая их на свойства со значениями.

Для этой задачи Serilog предоставляет оператор деструктурирования @.

var sensorInput = new { Latitude = 25, Longitude = 134 };
Log.Information("Processing {@SensorInput}", sensorInput);

(«Деструктуризация» — это термин, заимствованный из различных языков программирования; это стиль сопоставления с образцом, используемый для извлечения значений из структурированных данных. В настоящее время Serilog используется только условно, но возможные будущие расширения этого оператора могут соответствовать более точное определение.)

person C. Augusto Proiete    schedule 05.12.2019