Sdílet prostřednictvím


CA2254: Šablona by měla být statický výraz

Vlastnost Hodnota
ID pravidla CA2254
Název Šablona by měla být statický výraz.
Kategorie Využití
Oprava způsobující chybu nebo chybu způsobující chybu Nenarušující
Povoleno ve výchozím nastavení v .NET 8 Jako návrh

Příčina

Šablona zprávy předaná do rozhraní API protokolovacího nástroje není konstantní. K tomu dochází, když předaná šablona používá zřetězení řetězců nebo interpolaci. Místo toho by šablona měla být konstantní hodnota, která představuje zprávu protokolu ve formátu šablony zprávy. Například: "User {User} logged in from {Address}". Další informace najdete v tématu Formátování šablony zprávy protokolu.

Popis pravidla

Při protokolování je žádoucí zachovat strukturu protokolu (včetně zástupných názvů) spolu se zástupnými hodnotami. Zachování těchto informací umožňuje lepší pozorovatelnost a vyhledávání v agregaci protokolů a monitorovacím softwaru.

Preferovaný:

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

Preferováno:

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

Šablona zprávy protokolování by se neměla mezi voláními lišit.

Jak opravit porušení

Aktualizujte šablonu zprávy tak, aby byla konstantním výrazem. Pokud používáte hodnoty přímo v šabloně, refaktorujte šablonu tak, aby místo toho používala pojmenované zástupné symboly.

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

Příklady použití najdete v LoggerExtensions.LogInformation metodě.

Kdy potlačit chyby

Pokud váš případ použití nevyžaduje strukturované protokolování, je bezpečné potlačit upozornění z tohoto pravidla. Pokud je šablona zprávy protokolu definovaná v souboru prostředků, je také bezpečné toto pravidlo potlačit.

Viz také