CA2254: Il modello deve essere un'espressione statica
Proprietà | valore |
---|---|
ID regola | CA2254 |
Title | Il modello deve essere un'espressione statica |
Categoria | Utilizzo |
La correzione causa un'interruzione o meno | Non causa un'interruzione |
Abilitato per impostazione predefinita in .NET 9 | 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);
Per esempi di utilizzo, vedere il LoggerExtensions.LogInformation metodo .
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.