Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
| Właściwości | Wartość |
|---|---|
| Identyfikator reguły | CA1848 |
| Tytuł | Użyj delegatów LoggerMessage |
| Kategoria | Wydajność |
| Poprawka łamiąca lub nienaruszająca | Niezgodność |
| Domyślnie włączone na platformie .NET 10 | Nie. |
| Zastosowane języki | C# i Visual Basic |
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
Użyj LoggerMessageAttribute do naprawienia 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 rozszerzające dla rejestratorów wymagają "boxing" (konwertowania) typów wartości, takich jak
int, naobject. Wzorzec LoggerMessage unika boksowania, korzystając z pól statycznych Action i metod rozszerzeń z silnie typowanymi parametrami. - Metody rozszerzenia loggera muszą analizować szablon komunikatu (nazwany ciąg formatu) za każdym razem, gdy zapisano komunikat dziennika. LoggerMessage Wymaga analizowania szablonu tylko raz po zdefiniowaniu komunikatu.
Kiedy pomijać ostrzeżenia
Nie pomijaj ostrzeżeń dla tej reguły.