Condividi tramite


CA1848: Usare i delegati LoggerMessage

Proprietà valore
ID regola CA1848
Title Usare i delegati LoggerMessage
Categoria Prestazioni
La correzione causa un'interruzione o meno Non causa un'interruzione
Abilitato per impostazione predefinita in .NET 10 No

Causa

Uso di metodi di estensione del logger, ad esempio LogInformation e LogDebug.

Descrizione regola

Per gli scenari di registrazione ad alte prestazioni, usare il modello LoggerMessage anziché i metodi di Logger<T> estensione.

Come correggere le violazioni

Usare LoggerMessageAttribute per correggere le violazioni di questa regola. In alternativa, se si usa .NET 5 o versioni precedenti, usare la 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!");
   }
}

Il codice seguente corregge la violazione.

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 offre i vantaggi seguenti per le prestazioni rispetto Logger<T> ai metodi di estensione:

  • I metodi di estensione del logger richiedono una "conversione boxing" dei tipi di valori, ad esempio int, in object. LoggerMessage evita la conversione boxing usando campi Action statici e metodi di estensione con parametri fortemente tipizzati.
  • I metodi di estensione del logger devono analizzare il modello di messaggio (stringa di formato denominata) ogni volta che viene scritto un messaggio del log. Solo LoggerMessage richiede una sola analisi del modello durante la definizione del messaggio.

Quando eliminare gli avvisi

Non escludere un avviso da questa regola.

Vedi anche