CA2254: Il modello deve essere un'espressione statica

Proprietà valore
ID regola CA2254
Title Il modello deve essere un'espressione statica
Categoria Utilizzo
Correzione che causa un'interruzione o un'interruzione Nessuna interruzione
Abilitato per impostazione predefinita in .NET 8 Come suggerimento

Causa

Un modello di messaggio passato a un'API logger non è costante. Ciò si verifica quando il modello passato usa la concatenazione di stringhe o l'interpolazione. Al contrario, il modello deve essere un valore costante che rappresenta il messaggio di log in formato modello di messaggio. Ad esempio: "User {User} logged in from {Address}". Per altre informazioni, vedere Formattazione del modello di messaggio di log.

Descrizione regola

Quando si esegue la registrazione, è consigliabile mantenere la struttura del log (inclusi i nomi segnaposto) insieme ai valori segnaposto. Il mantenimento di queste informazioni consente una migliore osservabilità e ricerca nel software di monitoraggio e aggregazione dei log.

Preferito:

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

Non preferito:

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

Il modello di messaggio di registrazione non deve variare tra le chiamate.

Come correggere le violazioni

Aggiornare il modello di messaggio in modo che sia un'espressione costante. Se si usano valori direttamente nel modello, effettuare il refactoring del modello per usare i segnaposto denominati.

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

Quando eliminare gli errori

È possibile eliminare un avviso da questa regola se il caso d'uso non richiede la registrazione strutturata. È anche possibile eliminare questa regola se il modello di messaggio di log è definito in un file di risorse.

Vedi anche