CA2254: шаблон должен быть статическим выражением
Свойство | Значение |
---|---|
Идентификатор правила | CA2254 |
Заголовок | Шаблон должен быть статическим выражением |
Категория | Использование |
Исправление является критическим или не критическим | Не критическое |
Включен по умолчанию в .NET 9 | Как предложение |
Причина
Шаблон сообщения, переданный API средства ведения журнала, не является константой. Это происходит, когда в шаблоне, переданном, используется объединение строк или интерполяция. Вместо этого шаблон должен быть константным значением, которое представляет сообщение журнала в формате шаблона сообщения. Например: "User {User} logged in from {Address}"
. Дополнительные сведения см. в разделе "Форматирование шаблона сообщения журнала".
Описание правила
При выполнении ведения журнала желательно сохранить структуру журнала (включая имена заполнителей) вместе со значениями заполнителей. Сохранение этих сведений обеспечивает более высокую наблюдаемость и поиск в программном обеспечении агрегирования журналов и мониторинга.
Привилегированный:
var firstName = "Lorenz";
var lastName = "Otto";
// This tells the logger that there are FirstName and LastName properties
// on the log message, and correlates them with the argument values.
logger.Warning("Person {FirstName} {LastName} encountered an issue", firstName, lastName);
Не рекомендуется:
// DO NOT DO THIS
var firstName = "Lorenz";
var lastName = "Otto";
// Here, the log template itself is changing, and the association between named placeholders and their values is lost.
logger.Warning("Person " + firstName + " " + lastName + " encountered an issue");
// String interpolation also loses the association between placeholder names and their values.
logger.Warning($"Person {firstName} {lastName} encountered an issue");
Шаблон сообщения ведения журнала не должен отличаться от вызовов.
Устранение нарушений
Обновите шаблон сообщения, чтобы он был константным выражением. Если вы используете значения непосредственно в шаблоне, рефакторинг шаблона для использования именованных заполнителей вместо этого.
logger.Warning("Person {FirstName} {LastName} encountered an issue", firstName, lastName);
Примеры использования см. в методе LoggerExtensions.LogInformation .
Когда следует подавлять ошибки
Это безопасно, чтобы отключить предупреждение из этого правила, если в вашем случае использования не требуется структурированное ведение журнала. Это правило также безопасно отключить, если шаблон сообщения журнала определен в файле ресурса.