2016-06-26 2 views
2

Я использую Serilog и хочу распечатать информационное сообщение, содержащее контекстное свойство.Serilog print contextual property

Например:

var logger = Log.ForContext("FirstName", "Yosi"); 
logger.Information("Hello {FirstName}") 

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

var logger = Log.ForContext("FirstName", "Yosi"); 
logger.Information("Hello {FirstName} {LastName}", "Attias") 

Я ожидаю, что результат будет:

Здравствуйте Йоси Attias

, но я получаю:

Здравствуйте Attias {LastName}

Есть ли исправление для этого? я что-то упускаю? или это ошибка?

ответ

0

Шаблоны сообщений оцениваются только по параметрам, которые передаются методу ведения журнала. Операторы журнала предназначены для постоянной работы независимо от любой другой конфигурации/контекста в программе.

Если вы хотите добавить дополнительные свойства к выходу лесозаготовительного, добавить их к outputTemplate аргументу любой раковины вы настраиваете:

Log.Logger = new LoggerConfiguration() 
    .WriteTo.ColoredConsole(outputTemplate: 
    "{Timestamp:HH:mm} [{Level}] ({LastName}) {Message}{NewLine}{Exception}") 
    .CreateLogger(); 
+0

В настоящее время у меня есть регистратор в моем классе, и в моем методе - где я получить контекст по параметрам Я добавляю контекст в журнал. Например: https://gist.github.com/yosiat/3f98e98ccc586f1ef58a2a23858dd0ee Можно ли изменить шаблон вывода для моего регистратора, чтобы добавить messageId для «messageLogger»? – Yosi

+0

Привет Yosi - нет, выходной шаблон является единственным вариантом (кроме специального кода форматирования) для этого в настоящее время. –

Смежные вопросы