Share via


CA2254: La plantilla debe ser una expresión estática

Propiedad Value
Identificador de la regla CA2254
Título La plantilla debe ser una expresión estática
Categoría Uso
La corrección es problemática o no problemática Poco problemático
Habilitado de forma predeterminada en .NET 8 Como sugerencia

Causa

Una plantilla de mensaje que se pasa a una API de registrador no es constante. Esto ocurre cuando la plantilla pasada usa la concatenación de cadenas o la interpolación. En su lugar, la plantilla debe ser un valor constante que representa el mensaje de registro en el formato de plantillas de mensaje. Por ejemplo: "User {User} logged in from {Address}". Para obtener más información, consulte Formato de plantillas de mensajes de registro.

Descripción de la regla

Al realizar el registro, es conveniente conservar la estructura del registro (incluidos los nombres de marcador de posición) junto con los valores del marcador de posición. Conservar esta información permite una mejor observabilidad y búsqueda en el software de agregación y supervisión de registros.

Preferido:

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

No preferible:

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

La plantilla de mensaje de registro no debe variar entre llamadas.

Cómo corregir infracciones

Actualice la plantilla de mensaje para que sea una expresión constante. Si usa valores directamente en la plantilla, refactorícela para que use en su lugar los marcadores de posición designados.

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

Cuándo suprimir los errores

Es seguro suprimir una advertencia de esta regla si el caso de uso no requiere el registro estructurado. También es seguro suprimir esta regla si la plantilla de mensaje de registro está definida en un archivo de recursos.

Vea también