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

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.

Se även