Поделиться через


CA2254: шаблон должен быть статическим выражением

Свойство Значение
Идентификатор правила CA2254
Заголовок Шаблон должен быть статическим выражением
Категория Использование
Исправление является критическим или не критическим Не критическое
Включен по умолчанию в .NET 8 Как предложение

Причина

Шаблон сообщения, переданный 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);

Когда следует подавлять ошибки

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

См. также