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);
Para ver ejemplos de uso, consulte el método LoggerExtensions.LogInformation.
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.