Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
| Propriedade | valor |
|---|---|
| ID da regra | CA2254 |
| Título | O modelo deve ser uma expressão estática |
| Categoria | Utilização |
| A correção causa interrupção ou não | Ininterrupto |
| Habilitado por padrão no .NET 10 | Como sugestão |
| Línguas aplicáveis | C# e Visual Basic |
Motivo
Um modelo de mensagem passado para uma API do registrador não é constante. Isso ocorre quando o modelo passado usa concatenação de cadeia de caracteres ou interpolação. 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 de modelos de mensagens de log.
Descrição da regra
Ao realizar o registo, é desejável manter a estrutura do log (incluindo os nomes dos espaços reservados) juntamente com os valores dos espaços reservados. A preservação dessas informações permite uma melhor observabilidade e pesquisa em softwares de agregação e monitoramento 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 preferido:
// 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 não deve variar entre chamadas.
Como corrigir violações
Atualize o modelo de mensagem para ser uma expressão constante. Se estiveres a usar valores diretamente no modelo, refatora o modelo para utilizar variáveis de substituição nomeadas.
logger.LogWarning("Person {FirstName} {LastName} encountered an issue", firstName, lastName);
Para exemplos de uso, consulte o LoggerExtensions.LogInformation método.
Quando suprimir erros
É seguro suprimir um aviso dessa regra se o seu caso de uso não exigir registro estruturado. Também é seguro suprimir essa regra se o modelo de mensagem de log estiver definido em um arquivo de recurso.