CA2254: Mallen ska vara ett statiskt uttryck
Property | Värde |
---|---|
Regel-ID | CA2254 |
Title | Mallen ska vara ett statiskt uttryck |
Kategori | Användning |
Korrigeringen är icke-bakåtkompatibel | Icke-icke-bryta |
Aktiverad som standard i .NET 9 | Som förslag |
Orsak
En meddelandemall som skickas till ett loggnings-API är inte konstant. Detta inträffar när mallen som skickas använder antingen strängsammanfogning eller interpolation. Mallen bör i stället vara ett konstant värde som representerar loggmeddelandet i meddelandemallformat. Exempel: "User {User} logged in from {Address}"
. Mer information finns i Formatering av loggmeddelandemall.
Regelbeskrivning
När du utför loggning är det önskvärt att bevara loggens struktur (inklusive platshållarnamn) tillsammans med platshållarvärdena. Om du bevarar den här informationen får du bättre observerbarhet och sökning i loggaggregerings- och övervakningsprogramvaran.
Rekommenderad:
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);
Rekommenderas inte:
// 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");
Mallen för loggningsmeddelanden bör inte variera mellan anrop.
Så här åtgärdar du överträdelser
Uppdatera meddelandemallen så att den är ett konstant uttryck. Om du använder värden direkt i mallen omstrukturerar du mallen så att den använder namngivna platshållare i stället.
logger.Warning("Person {FirstName} {LastName} encountered an issue", firstName, lastName);
För användningsexempel, se LoggerExtensions.LogInformation metoden.
När fel ska ignoreras
Det är säkert att ignorera en varning från den här regeln om ditt användningsfall inte kräver strukturerad loggning. Det är också säkert att ignorera den här regeln om din loggmeddelandemall har definierats i en resursfil.