Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
| 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, enobject. 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.