Compartilhar via


CA2254: o modelo deve ser uma expressão estática

Property Valor
ID da regra CA2254
Título O modelo deve ser uma expressão estática
Categoria Usage
Correção interruptiva ou sem interrupção Sem interrupção
Habilitado por padrão no .NET 8 Como sugestão

Causa

Um modelo de mensagem passado para uma API do agente não é constante. Isso ocorre quando o modelo passado usa concatenação ou interpolação de cadeia de caracteres. Em vez disso, o modelo deve ser um valor constante que representa a mensagem de log no formato de modelo de mensagem. Por exemplo: "User {User} logged in from {Address}". Para obter mais informações, consulte Formatação do modelo de mensagem de log.

Descrição da regra

Ao executar o registro em log, é desejável preservar a estrutura do log (incluindo nomes de espaço reservado) junto com os valores de espaço reservado. Preservar essas informações permite uma melhor observabilidade e pesquisa no software de monitoramento e agregação de logs.

Preferencial:

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

Não preferencial:

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

O modelo de mensagem de registro em log não deve variar entre as chamadas.

Como corrigir violações

Atualize o modelo de mensagem para ser uma expressão constante. Se você estiver usando valores diretamente no modelo, refatore o modelo para usar espaços reservados nomeados como alternativa.

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

Para obter exemplos de uso, confira o método LoggerExtensions.LogInformation.

Quando suprimir erros

É seguro suprimir um aviso dessa regra se o caso de uso não exige registro em log estruturado. Também é seguro suprimir essa regra se o modelo de mensagem de log está definido em um arquivo de recurso.

Confira também