Доступ к свойствам в Serilog, когда не используется деструктуризация - PullRequest
1 голос
/ 03 октября 2019

Проект, над которым я сейчас работаю, отправляет журналы в ElasticSearch, и вместе с сообщением журнала я хотел бы включить некоторые дополнительные метаданные для каждого конкретного случая с использованием следующей модели:

log.Warning("Something went wrong", new
{
    EmailAddress = "example@example.com",
});

Сначала я думал, что получить доступ к этим свойствам можно легко, расширив приемник (используя ILogEventSink.Emit(LogEvent logEvent);) и записав их в окончательный вывод журнала. Однако я заметил, что свойства заполняются только при деструктурировании сообщения журнала.

Есть ли какие-либо способы доступа к объекту, переданному в вышеупомянутом примере кода? Или альтернативные способы присоединения метаданных к вашему сообщению без использования деструктуризации в сообщении журнала?

1 Ответ

0 голосов
/ 04 октября 2019

Не уверен в вашем запросе, но:

log.ForContext("EmailAddress","example@example.com")
   .Warning("Something went wrong")

Добавит свойство EmailAddress к захваченному набору [и вы увидите, что они отображаются в полях {Properties} в шаблонах сообщений и [предположительно]в сообщениях, отправляемых в ES].

Я почти уверен, что аргумент в вашем примере будет проигнорирован - дыры в шаблоне сообщения заполняются аргументами по порядку - все дополнительные элементы игнорируются. (Полагаю, вы можете подтвердить или исключить мою догадку, установив Serilog Analyzer или прочитав тесты Serilog)

...