Delen via


CA2254: Sjabloon moet een statische expressie zijn

Eigenschappen Weergegeven als
Regel-id CA2254
Titel Sjabloon moet een statische expressie zijn
Categorie Gebruik
Oplossing is brekend of niet-brekend Niet-brekend
Standaard ingeschakeld in .NET 8 Als suggestie

Oorzaak

Een berichtsjabloon die wordt doorgegeven aan een logger-API, is niet constant. Dit gebeurt wanneer de doorgegeven sjabloon gebruikmaakt van tekenreekssamenvoeging of interpolatie. In plaats daarvan moet de sjabloon een constante waarde zijn die het logboekbericht in de berichtsjabloonindeling vertegenwoordigt. Voorbeeld: "User {User} logged in from {Address}". Zie De opmaak van logboekberichtensjabloon voor meer informatie.

Beschrijving van regel

Bij het uitvoeren van logboekregistratie is het wenselijk om de structuur van het logboek (inclusief tijdelijke aanduidingen) samen met de waarden van de tijdelijke aanduidingen te behouden. Door deze informatie te behouden, kunt u beter waarneembaar zijn en zoeken in logboekaggregatie- en bewakingssoftware.

Voorkeur:

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

Niet van voorkeur:

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

De sjabloon voor logboekregistratieberichten mag niet per aanroep verschillen.

Schendingen oplossen

Werk de berichtsjabloon bij als een constante expressie. Als u waarden rechtstreeks in de sjabloon gebruikt, herstructureert u de sjabloon om in plaats daarvan benoemde tijdelijke aanduidingen te gebruiken.

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

Wanneer fouten onderdrukken

Het is veilig om een waarschuwing van deze regel te onderdrukken als uw use-case geen gestructureerde logboekregistratie vereist. Het is ook veilig om deze regel te onderdrukken als uw logboekberichtsjabloon is gedefinieerd in een resourcebestand.

Zie ook