Udostępnij za pośrednictwem


CA2254: Szablon powinien być wyrażeniem statycznym

Właściwości Wartość
Identyfikator reguły CA2254
Tytuł Szablon powinien być wyrażeniem statycznym
Kategoria Użycie
Poprawka powodująca niezgodność lub niezgodność Niezgodność
Domyślnie włączone na platformie .NET 9 Jako sugestia

Przyczyna

Szablon komunikatu przekazany do interfejsu API rejestratora nie jest stały. Dzieje się tak, gdy przekazany szablon używa łączenia ciągów lub interpolacji. Zamiast tego szablon powinien być stałą wartością reprezentującą komunikat dziennika w formacie szablonu komunikatu. Na przykład: "User {User} logged in from {Address}". Aby uzyskać więcej informacji, zobacz Formatowanie szablonu komunikatu dziennika.

Opis reguły

Podczas rejestrowania pożądane jest zachowanie struktury dziennika (w tym nazw zastępczych) wraz z wartościami zastępczymi. Zachowanie tych informacji umożliwia lepsze obserwowanie i wyszukiwanie w oprogramowaniu agregacji dzienników i monitorowania.

Preferowany:

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);

Nie preferowane:

// 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");

Szablon komunikatu rejestrowania nie powinien różnić się między wywołaniami.

Jak naprawić naruszenia

Zaktualizuj szablon komunikatu, aby był wyrażeniem stałym. Jeśli używasz wartości bezpośrednio w szablonie, refaktoryzuj szablon, aby zamiast tego używać nazwanych symboli zastępczych.

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

Przykłady użycia można znaleźć w metodzie LoggerExtensions.LogInformation .

Kiedy pomijać błędy

Można bezpiecznie pominąć ostrzeżenie z tej reguły, jeśli przypadek użycia nie wymaga rejestrowania strukturalnego. Można również bezpiecznie pominąć tę regułę, jeśli szablon komunikatu dziennika jest zdefiniowany w pliku zasobu.

Zobacz też