Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
| Свойство | Значение |
|---|---|
| Идентификатор правила | 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 требует анализировать шаблон всего один раз — при определении сообщения.
Когда лучше отключить предупреждения
Для этого правила отключать вывод предупреждений не следует.