Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
| 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
intinobject(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.