Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
| 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, tillobject. 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.