CA1848 : utilisez les délégués LoggerMessage

Propriété Valeur
Identificateur de la règle CA1848
Titre Utilisation des délégués de LoggerMessage
Catégorie Performance
Le correctif a un effet disruptif ou non disruptif Sans rupture
Activé par défaut dans .NET 10 Non
Langues applicables C# et Visual Basic

Cause

Utilisation des méthodes d’extension d’enregistreur d’événements, telles que LogInformation et LogDebug.

Description de la règle

Pour les scénarios de journalisation hautes performances, utilisez le modèle LoggerMessage au lieu des méthodes d’extension Logger<T> .

Comment corriger les violations

Utilisez LoggerMessageAttribute pour corriger les violations de cette règle. (Ou, si vous utilisez .NET 5 ou une version antérieure, utilisez la LoggerMessage classe.)

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

Le code suivant corrige la violation.

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 offre les avantages suivants en matière de performances par rapport Logger<T> aux méthodes d’extension :

  • Les méthodes d’extension de journaliseur nécessitent la conversion (« boxing ») de types de valeur, tels que int, en object. Le modèle LoggerMessage évite le boxing en utilisant des champs Action statiques et des méthodes d'extension avec des paramètres fortement typés.
  • Les méthodes d’extension de journaliseur doivent analyser le modèle de message (chaîne de format nommé) chaque fois qu’un message de journal est écrit. LoggerMessage requiert l’analyse d’un modèle une seule fois quand le message est défini.

Quand supprimer les avertissements

Ne supprimez pas un avertissement provenant de cette règle.

Voir aussi