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 10 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.LogWarning("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.LogWarning("Person " + firstName + " " + lastName + " encountered an issue");

// String interpolation also loses the association between placeholder names and their values.
logger.LogWarning($"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.LogWarning("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