Именованные заполнители не должны быть числовыми значениями в Serilog и преимущества использования структурированного ведения журнала по сравнению с интерполяцией строк в Serilog?

Почему в Serilog именованные заполнители не должны быть числовыми значениями, но числовые заполнители не генерируют предупреждение сConsole.WriteLine.

например:

      _log.LogInformation("some data - {0} and data2: {1} ", data1, data2);

вызывает предупреждение

именованные заполнители не должны быть числовыми значениями

и следующее работает нормально без каких-либо предупреждений

      _log.LogInformation("some data - {data1} and data2: {data2} ", data1, data2);

Но почему этот код здесь не генерирует никаких предупреждений?

      Console.WriteLine("some data - {0} and data2: {1} ", data1, data2);

И каковы преимущества использования структурированного ведения журнала по сравнению со строковой интерполяцией в Serilog?

1 ответ

Справочная информация о структурированном ведении журнала в Serilog и в целом (охватывает, для чего предназначены шаблоны сообщений, что ответит на ваш вопрос гораздо более полно, чем попытка воспроизвести это здесь):

TL;DR: шаблоны сообщений — это (технически восходящая совместимость) расширение семантики шаблонов сообщений, используемой в String.Format, с определенными соглашениями. Как говорится в сообщении: для сообщений журнала вы не должны использовать пронумерованные заполнители, вместо этого используйте строковые идентификаторы для имен полей.

The LogInformationвызов в вашем примере определяетсяMicrosoft.Extensions.Logging, который разделяет правила и соглашения о том, как добавлять поля в сообщения структурированного журнала. Если вы подключили это к Serilog, то он также должен будет соответствовать его правилам (которые в значительной степени идентичны). Сам Serilog фактически позволит вам использовать числа в качестве идентификаторов полей, но вы упускаете смысл (легко читать/запрашивать семантически значимые сообщения журнала), если вы это делаете. По этой причинеSerilog Analyzerправила (и, возможно, некоторые основанные на MEL) будут поощрять вас использовать имена, а не значения.

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