Бөлісу құралы:


CA1848: Использование делегатов LoggerMessage

Свойство Значение
Идентификатор правила CA1848
Заголовок Использование делегатов LoggerMessage
Категория Производительность
Исправление является критическим или не критическим неразрывный
Включен по умолчанию в .NET 10 Нет
Применимые языки C# и Visual Basic

Причина

Использование методов расширения логгера, таких как LogInformation и LogDebug.

Описание правила

Для сценариев ведения журнала с высокой производительностью используйте шаблон LoggerMessage вместо Logger<T> методов расширения.

Устранение нарушений

Используется LoggerMessageAttribute для устранения нарушений этого правила. (Или, если вы используете .NET 5 или более раннюю версию, используйте класс 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!");
   }
}

Следующий код исправляет нарушение.

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 предоставляет следующие преимущества производительности по сравнению с Logger<T> методами расширения:

  • Методы расширения для средства ведения журнала требуют "упаковку (преобразование)" типов значений, таких как int, в object. Шаблон LoggerMessage избегает бокса путём использования статических Action полей и методов расширения с строго типизированными параметрами.
  • Методы расширения для логгера должны анализировать шаблон сообщения (строку формата с именем) каждый раз, когда записывается сообщение журнала. LoggerMessage требует анализировать шаблон всего один раз — при определении сообщения.

Когда лучше отключить предупреждения

Для этого правила отключать вывод предупреждений не следует.

См. также