Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
| Property | Valor |
|---|---|
| ID da regra | CA1848 |
| Título | Use os delegados LoggerMessage |
| Categoria | Desempenho |
| Correção interruptiva ou sem interrupção | Sem interrupção |
| Habilitado por padrão no .NET 10 | Não |
Causa
Uso de métodos de extensão do agente, como LogInformation e LogDebug.
Descrição da regra
Para cenários de log de alto desempenho, use o padrão LoggerMessage em vez dos métodos de extensão Logger<T>.
Como corrigir violações
Use LoggerMessageAttribute para corrigir as violações dessa regra. (Ou, se você estiver usando o .NET 5 ou anterior, use a LoggerMessage classe.)
public class SomethingDoer
{
private readonly ILogger _logger;
public SomethingDoer(ILogger<SomethingDoer> logger)
{
_logger = logger;
}
public void DoSomething()
{
// This call violates CA1848.
_logger.LogInformation("Did something!");
}
}
O código a seguir corrige a violação.
public partial class SomethingDoer
{
private readonly ILogger _logger;
public SomethingDoer(ILogger<SomethingDoer> logger)
{
_logger = logger;
}
public void DoSomething()
{
Log_DidSomething();
}
[LoggerMessage(Level = LogLevel.Information, Message = "Did something!")]
private partial void Log_DidSomething();
}
LoggerMessage fornece as seguintes vantagens de desempenho em comparação com os métodos de extensão Logger<T>.
- Métodos de extensão do agente exigem tipos de valor de conversão boxing, como
int, emobject. O padrão LoggerMessage evita a conversão boxing usando campos Action estáticos e métodos de extensão com parâmetros fortemente tipados. - Os métodos de extensão do agente precisam analisar o modelo de mensagem (cadeia de caracteres de formato nomeada) sempre que uma mensagem de log é gravada. LoggerMessage exige apenas a análise de um modelo uma vez quando a mensagem é definida.
Quando suprimir avisos
Não suprima um aviso nessa regra.