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 rompente
Abilitato per impostazione predefinita in .NET 10 No
Linguaggi applicabili C# e Visual Basic

Causa

Uso dei 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 un "boxing" (conversione) dei tipi di valore, come int, in object. Il modello LoggerMessage evita la conversione in oggetti (boxing) utilizzando campi Action statici e metodi di estensione con parametri strettamente tipizzati.
  • I metodi di estensione del logger devono analizzare il modello di messaggio (stringa di formato denominata) ogni volta che viene scritto un messaggio di log. Solo LoggerMessage richiede una sola analisi del modello durante la definizione del messaggio.

Quando eliminare gli avvisi

Non sopprimere un avviso da questa regola.

Vedi anche