CA2254: Vorlage muss ein statischer Ausdruck sein
Eigenschaft | Wert |
---|---|
Regel-ID | CA2254 |
Titel | Vorlage muss ein statischer Ausdruck sein |
Kategorie | Verwendung |
Fix führt oder führt nicht zur Unterbrechung | Nicht unterbrechend |
Standardmäßig in .NET 9 aktiviert | Als Vorschlag |
Ursache
Eine an eine Protokollierungs-API übergebene Nachrichtenvorlage ist nicht konstant. Dies tritt auf, wenn die übergebene Vorlage entweder Zeichenfolgenverkettung oder Interpolation verwendet. Stattdessen sollte die Vorlage ein konstanter Wert sein, der die Protokollnachricht im Nachrichtenvorlagenformat darstellt. Beispiel: "User {User} logged in from {Address}"
. Weitere Informationen finden Sie unter Formatieren von Protokollnachrichtenvorlagen.
Regelbeschreibung
Bei der Protokollierung ist es wünschenswert, die Struktur des Protokolls (einschließlich Platzhalternamen) zusammen mit den Platzhalterwerten beizubehalten. Die Beibehaltung dieser Informationen ermöglicht in der Protokollaggregation und -überwachungssoftware eine bessere Beobachtbarkeit und Suche.
Bevorzugt:
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);
Nicht bevorzugt:
// 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");
Die Vorlage für Protokollierungsnachrichten darf nicht zwischen Aufrufen variieren.
Behandeln von Verstößen
Ändern Sie die Nachrichtenvorlage in einen konstanten Ausdruck. Wenn Sie Werte direkt in der Vorlage nutzen, gestalten Sie die Vorlage so um, dass stattdessen benannte Platzhalter verwendet werden.
logger.Warning("Person {FirstName} {LastName} encountered an issue", firstName, lastName);
Verwendungsbeispiele finden Sie in der LoggerExtensions.LogInformation-Methode.
Fälle für die Unterdrückung von Warnungen
Wenn Ihr Anwendungsfall keine strukturierte Protokollierung erfordert, können Sie eine Warnung für diese Regel sicher unterdrücken. Wenn Ihre Protokollmeldungsvorlage in einer Ressourcendatei definiert ist, können Sie diese Regel ebenfalls sicher unterdrücken.