Dela via


CA1848: Använd LoggerMessage-ombuden

Property Värde
Regel-ID CA1848
Title Använda LoggerMessage-ombuden
Kategori Prestanda
Korrigeringen är icke-bakåtkompatibel Icke-icke-bryta
Aktiverad som standard i .NET 9 Nej

Orsak

Användning av inloggningstilläggsmetoder, till exempel LogInformation och LogDebug.

Regelbeskrivning

För loggningsscenarier med höga prestanda använder du LoggerMessage-mönstret i stället Logger<T> för tilläggsmetoder.

Så här åtgärdar du överträdelser

Använd LoggerMessageAttribute för att åtgärda överträdelser av den här regeln. (Om du använder .NET 5 eller tidigare, använd klassen LoggerMessage.)

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

Följande kod åtgärdar överträdelsen.

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 ger följande prestandafördelar jämfört Logger<T> med tilläggsmetoder:

  • Inloggningstilläggsmetoder kräver "boxning" (konvertera) värdetyper, till exempel int, till object. Mönstret LoggerMessage undviker boxning med hjälp av statiska Action fält och tilläggsmetoder med starkt skrivna parametrar.
  • Inloggningstilläggsmetoder måste parsa meddelandemallen (namngiven formatsträng) varje gång ett loggmeddelande skrivs. LoggerMessage kräver bara parsning av en mall en gång när meddelandet har definierats.

När du ska ignorera varningar

Ignorera inte en varning från den här regeln.

Se även