Delen via


CA1848: De LoggerMessage-gemachtigden gebruiken

Eigenschappen Weergegeven als
Regel-id CA1848
Titel De LoggerMessage-gemachtigden gebruiken
Categorie Prestaties
Oplossing is brekend of niet-brekend Niet-brekend
Standaard ingeschakeld in .NET 9 Nee

Oorzaak

Gebruik van extensiemethoden voor logboekregistratie, zoals LogInformation en LogDebug.

Beschrijving van regel

Gebruik voor logboekregistratiescenario's met hoge prestaties het LoggerMessage-patroon in plaats van Logger<T> extensiemethoden.

Schendingen oplossen

Gebruik LoggerMessageAttribute dit om schendingen van deze regel op te lossen. (Of als u .NET 5 of eerder gebruikt, gebruikt u de LoggerMessage klasse.)

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!");
   }
}

Met de volgende code wordt de schending opgelost.

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 biedt de volgende prestatievoordelen ten opzichte Logger<T> van extensiemethoden:

  • Voor extensiemethoden voor logboekregistratie zijn waardetypen voor boksen (converteren) vereist, zoals int, in object. Het LoggerMessage patroon voorkomt boksen met behulp van statische Action velden en extensiemethoden met sterk getypte parameters.
  • Extensiemethoden voor logboekregistratie moeten de berichtsjabloon (benoemde notatietekenreeks) parseren telkens wanneer een logboekbericht wordt geschreven. LoggerMessage parseren van een sjabloon is slechts eenmaal vereist wanneer het bericht is gedefinieerd.

Wanneer waarschuwingen onderdrukken

Een waarschuwing van deze regel niet onderdrukken.

Zie ook