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.