CA1848: A LoggerMessage delegáltak használata

Tulajdonság Érték
Szabályazonosító CA1848
Cím A LoggerMessage-meghatalmazottak használata
Kategória Teljesítmény
A javítás romboló vagy nem romboló Nem törhető
Alapértelmezés szerint engedélyezve a .NET 10-ben Nem
Alkalmazandó nyelvek C# és Visual Basic

Ok

A naplózóbővítmény metódusainak használata, például LogInformation ésLogDebug.

Szabály leírása

Nagy teljesítményű naplózási forgatókönyvek esetén használja a LoggerMessage mintát a bővítménymetelyek helyett Logger<T> .

Szabálysértések kijavítása

A szabály megsértéseinek kijavítására használható LoggerMessageAttribute . (Vagy ha .NET 5 vagy korábbi verziót használ, használja az osztályt 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!");
   }
}

Az alábbi kód kijavítja a szabálysértést.

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 a bővítménymetelyekkel szemben Logger<T> a következő teljesítményelőnyöket biztosítja:

  • A naplózási bővítmény metódusaihoz "boxing" (konvertálás) típusú értéktípusokra van szükség, például int: object. A LoggerMessage minta elkerüli a boxingot azáltal, hogy statikus Action mezőket és kiterjesztési metódusokat használ erősen típusos paraméterekkel.
  • A naplózó bővítmény metódusainak minden alkalommal elemezniük kell az üzenetsablont (elnevezett formátumsztringet), amikor naplóüzenetet írnak. LoggerMessage csak egyszer kell elemezni egy sablont az üzenet definiálásakor.

Mikor kell letiltani a figyelmeztetéseket?

Ne nyomja el a figyelmeztetést ebből a szabályból.

Lásd még