Freigeben über


CA1848: Verwenden der LoggerMessage-Delegaten

Eigenschaft Wert
Regel-ID CA1848
Titel Verwenden Sie die LoggerMessage-Delegates
Kategorie Leistung
Fix führt zu Unterbrechungen oder bleibt funktionsfähig Untrennbar
Standardmäßig in .NET 10 aktiviert Nein
Anwendbare Sprachen C# und Visual Basic

Ursache

Verwendung von Protokollierungserweiterungsmethoden wie LogInformation und LogDebug.

Regelbeschreibung

Verwenden Sie für Hochleistungsprotokollierungsszenarien das LoggerMessage-Muster anstelle von Logger<T> Erweiterungsmethoden.

So beheben Sie Verstöße

Verwenden Sie LoggerMessageAttribute, um Verstöße gegen diese Regel zu beheben. (Wenn Sie .NET 5 oder früher verwenden, verwenden Sie die 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!");
   }
}

Der folgende Code behebt den Verstoß.

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 bietet die folgenden Leistungsvorteile gegenüber Logger<T> Erweiterungsmethoden:

  • Protokollierungserweiterungsmethoden erfordern das Konvertieren von Werttypen wie int in object (sogenanntes Boxing). Das LoggerMessage-Muster vermeidet das Boxing durch die Verwendung von statischen Action-Feldern und Erweiterungsmethoden mit stark typisierten Parametern.
  • Protokollierungserweiterungsmethoden müssen die Meldungsvorlagen (sogenannte Formatzeichenfolgen) jedes Mal analysieren, wenn eine Protokollmeldung geschrieben wird. LoggerMessage erfordert das Analysieren einer Vorlage nur einmal beim Festlegen der Meldung.

Wann sollten Warnungen unterdrückt werden?

Unterdrücken Sie keine Warnung dieser Regel.

Siehe auch