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.
Preferent:
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);
Zie de LoggerExtensions.LogInformation methode voor gebruiksvoorbeelden.
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.