Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
| Property | valor |
|---|---|
| ID da regra | CA1848 |
| Título | Usar os delegados LoggerMessage |
| Categoria | Desempenho |
| A correção está quebrando ou não quebrando | Sem quebra |
| Habilitado por padrão no .NET 10 | Não |
Motivo
Uso de métodos de extensão do logger, como LogInformation e LogDebug.
Descrição da regra
Para cenários de logging de alto desempenho, use o padrão LoggerMessage em vez dos métodos de extensão.
Como corrigir violações
Use LoggerMessageAttribute para corrigir violações desta 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 relação aos Logger<T> métodos de extensão:
- Os métodos de extensão do Logger exigem tipos de valor "boxing" (conversão), como
int, emobject. O LoggerMessage padrão evita o boxe usando campos estáticos Action e métodos de extensão com parâmetros fortemente tipados. - Os métodos de extensão do logger devem analisar o modelo de mensagem (cadeia de caracteres de formato nomeada) sempre que uma mensagem de log é gravada. LoggerMessage só requer a análise de um modelo uma vez quando a mensagem é definida.
Quando suprimir avisos
Não suprima um aviso desta regra.