Freigeben über


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 8 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.

Weitere Informationen