Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
| Vlastnost | Hodnota |
|---|---|
| ID pravidla | CA1848 |
| Název | Použití delegátů LoggerMessage |
| Kategorie | Výkon |
| Oprava způsobující chybu nebo chybu způsobující chybu | Nenarušující |
| Povoleno ve výchozím nastavení v .NET 10 | No |
Příčina
Použití metod rozšíření protokolovacího nástroje, například LogInformation a LogDebug.
Popis pravidla
Pro scénáře protokolování s vysokým výkonem použijte místo rozšiřujících metod vzor Logger<T>.
Jak opravit porušení
Slouží LoggerMessageAttribute k opravě porušení tohoto pravidla. (Nebo pokud používáte .NET 5 nebo starší, použijte LoggerMessage třídu.)
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!");
}
}
Následující kód opraví porušení předpisů.
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 poskytuje následující výhody výkonu oproti Logger<T> rozšiřujícím metodám:
- Metody rozšíření protokolovacího nástroje vyžadují "boxing" (převod) hodnotové typy, například
int, doobject. Vzor LoggerMessage se vyhne boxování pomocí statických Action polí a rozšiřujících metod se silnými parametry. - Metody rozšíření protokolovacího nástroje musí analyzovat šablonu zprávy (pojmenovaný formát řetězec) při každém zápisu zprávy protokolu. LoggerMessage Při definování zprávy vyžaduje pouze jednou parsování šablony.
Kdy potlačit upozornění
Nepotlačujte upozornění na toto pravidlo.