CA1848: De LoggerMessage-gemachtigden gebruiken

Eigenschap Waarde
Regel-id CA1848
Titel De LoggerMessage-gemachtigden gebruiken
Categorie Prestaties
Fix kan brekend of niet-brekend zijn Niet-brekend
Standaard ingeschakeld in .NET 10 Nee
Toepasselijke talen C# en Visual Basic

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.

Hoe schendingen op te lossen

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:

  • Extensiemethoden voor logboekregistratie vereisen het "boxen" (converteren) van waardetypen, zoals int, naar object. Het LoggerMessage patroon voorkomt verpakken door gebruik te maken van statische Action velden en uitbreidingsmethoden met sterk getype 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