CA1848: Použijte delegáty LoggerMessage

Vlastnost Hodnota
ID pravidla CA1848
Název Použití delegátů LoggerMessage
Kategorie Výkon
Oprava, která může být destruktivní nebo nedestruktivní Nezlomitelný
Povoleno ve výchozím nastavení v .NET 10 Ne
Příslušné jazyky C# a Visual Basic

Příčina

Použití rozšiřujících metod loggeru, jako LogInformation a LogDebug.

Popis pravidla

Pro scénáře protokolování s vysokým výkonem použijte místo rozšiřujících metod vzor Logger<T>.

Jak opravit porušení

Slouží LoggerMessageAttribute k opravě porušení tohoto pravidla. (Nebo pokud používáte .NET 5 nebo starší, použijte LoggerMessage třídu.)

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

Následující kód opraví porušení předpisů.

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 poskytuje následující výhody výkonu oproti Logger<T> rozšiřujícím metodám:

  • Metody rozšíření protokolovacího nástroje vyžadují "boxování" (převod) u hodnotových typů, například int, do object. Vzor LoggerMessage se vyhne boxování pomocí statických Action polí a rozšiřujících metod se silně typovanými parametry.
  • Metody rozšíření logovacího systému musí analyzovat šablonu zprávy (formátovaný řetězec pokaždé, když je zapsána zpráva do logu). LoggerMessage Při definování zprávy vyžaduje pouze jednou parsování šablony.

Kdy potlačit upozornění

Nepotlačujte upozornění na toto pravidlo.

Viz také