Бөлісу құралы:


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

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

Причина

Шаблон сообщения, переданный 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.LogWarning("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.LogWarning("Person " + firstName + " " + lastName + " encountered an issue");

// String interpolation also loses the association between placeholder names and their values.
logger.LogWarning($"Person {firstName} {lastName} encountered an issue");

Шаблон сообщения журналирования не должен изменяться между вызовами.

Устранение нарушений

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

logger.LogWarning("Person {FirstName} {LastName} encountered an issue", firstName, lastName);

Примеры использования см. в методе LoggerExtensions.LogInformation .

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

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

См. также