Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
| Właściwości | Wartość |
|---|---|
| Identyfikator reguły | CA1848 |
| Tytuł | Używanie delegatów loggerMessage |
| Kategoria | Wydajność |
| Poprawka powodująca niezgodność lub niezgodność | Niezgodność |
| Domyślnie włączone na platformie .NET 10 | Nie. |
Przyczyna
Używanie metod rozszerzenia rejestratora, takich jak LogInformation i LogDebug.
Opis reguły
W przypadku scenariuszy rejestrowania o wysokiej wydajności należy użyć wzorca LoggerMessage zamiast Logger<T> metod rozszerzeń.
Jak naprawić naruszenia
Służy LoggerMessageAttribute do naprawiania naruszeń tej reguły. (Jeśli używasz platformy .NET 5 lub starszej, użyj klasy 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!");
}
}
Poniższy kod naprawia naruszenie.
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 zapewnia następujące korzyści w zakresie wydajności w porównaniu z Logger<T> metodami rozszerzeń:
- Metody rozszerzenia rejestratora wymagają typów wartości typu "boxing" (konwertowanie), takich jak
int, naobject. Wzorzec LoggerMessage unika tworzenia pól statycznych Action i metod rozszerzeń z silnie typinymi parametrami. - Metody rozszerzenia rejestratora muszą analizować szablon komunikatu (nazwany ciąg formatu) za każdym razem, gdy jest zapisywany komunikat dziennika. LoggerMessage Wymaga analizowania szablonu tylko raz po zdefiniowaniu komunikatu.
Kiedy pomijać ostrzeżenia
Nie pomijaj ostrzeżeń dla tej reguły.