CA2254 : Le modèle doit être une expression statique

Propriété Value
Identificateur de la règle CA2254
Titre Le modèle doit être une expression statique
Catégorie Utilisation
Le correctif est cassant ou non cassant Sans rupture
Activé par défaut dans .NET 8 À titre de suggestion

Cause

Un modèle de message transmis à l’API d’un enregistreur d’événements n’est pas constant. Ce problème survient lorsque le modèle transmis utilise l’interpolation ou la concaténation de chaînes. Le modèle doit être une valeur constante représentant le message de journal au format du modèle de message. Par exemple : "User {User} logged in from {Address}". Pour plus d’informations, consultez Mise en forme du modèle de message de journal.

Description de la règle

Au moment de la journalisation, il est conseillé de conserver la structure du journal (y compris les noms des espaces réservés) ainsi que les valeurs des espaces réservés. La conservation de ces informations permet une meilleure observabilité et facilite les recherches dans les logiciels d’agrégation et de surveillance des journaux.

Préféré :

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 préféré :

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

Le modèle de message de journalisation ne doit pas varier d’un appel à l’autre.

Comment corriger les violations

Mettez à jour le modèle de message pour qu’il s’agisse d’une expression constante. Si vous utilisez des valeurs directement dans le modèle, refactorisez celui-ci de façon à utiliser plutôt des espaces réservés nommés.

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

Quand supprimer les erreurs

Vous pouvez sans risque supprimer un avertissement de cette règle si votre cas d’usage n’implique pas de journalisation structurée, ou si votre modèle de message de journal est défini dans un fichier de ressources.

Voir aussi