CA2254: A sablonnak statikus kifejezésnek kell lennie
Tulajdonság | Érték |
---|---|
Szabályazonosító | CA2254 |
Cím | A sablonnak statikus kifejezésnek kell lennie |
Kategória | Használat |
A javítás kompatibilitástörő vagy nem törik | Nem törés |
Alapértelmezés szerint engedélyezve a .NET 9-ben | Javaslatként |
Ok
A naplózó API-nak átadott üzenetsablon nem állandó. Ez akkor fordul elő, ha az átadott sablon sztringösszefűzést vagy interpolációt használ. Ehelyett a sablonnak állandó értéknek kell lennie, amely üzenetsablon formátumban jeleníti meg a naplóüzenetet. Például: "User {User} logged in from {Address}"
További információ: Naplóüzenetsablon formázása.
Szabály leírása
A naplózás végrehajtásakor célszerű megőrizni a napló szerkezetét (beleértve a helyőrző neveket is) és a helyőrző értékeket. Ezen információk megőrzése jobb megfigyelhetőséget és keresést tesz lehetővé a naplóösszesítő és monitorozó szoftverekben.
Előnyben részesített:
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);
Nem előnyben részesített:
// 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");
A naplózási üzenet sablonja nem változhat a hívások között.
Szabálysértések kijavítása
Frissítse az üzenetsablont állandó kifejezésként. Ha közvetlenül a sablonban használ értékeket, módosítsa újra a sablont nevesített helyőrzők használatára.
logger.LogWarning("Person {FirstName} {LastName} encountered an issue", firstName, lastName);
A használati példákért tekintse meg a metódust LoggerExtensions.LogInformation .
Mikor kell letiltani a hibákat?
Ha a használati eset nem igényel strukturált naplózást, nyugodtan letilthatja a szabály figyelmeztetését. A szabályt akkor is nyugodtan letilthatja, ha a naplóüzenet-sablon egy erőforrásfájlban van definiálva.