Фильтрация событий уровня отладки - это не то же самое, что установка минимального уровня; Serilog может использоваться для сериализации структурированных данных журнала, так что вполне вероятно, что построение событий Debug
пожирает время.
Это, вероятно, указывает на проблему с вашим журналом отладки - сам Serilog работает быстро, но если ваши события отладки сериализуют произвольные большие вещи, например полезные нагрузки запрос / ответ, или DTO, ваше приложение в конечном итоге выполнит много размышлений, обращений к свойствам ваших объектов (которые могут блокировать, выполнять ввод-вывод и другие сумасшедшие вещи), выделения и сборку мусора.
Если в событиях отладки используются недопустимые шаблоны сообщений (т. Е. При ведении журнала с использованием $"..."
строковой интерполяции или неконстантных строк), то ваше приложение также будет тратить много энергии на их анализ в виде строк формата.
т.е. дело не в том, что Serilog работает медленно, а в том, что ваше приложение непреднамеренно заставляет его выполнять много напрасной работы.
Использование Debug
, а затем более позднего фильтра Information
на приемнике консоли приведет к выполнению всей этой работы, а затем ее выбрасыванию. Установка минимального уровня на Information
предотвратит выполнение этой работы.
В долгосрочной перспективе аудит журналирования на уровне отладки на предмет использования неконстантных шаблонов сообщений @
и destructureObjects: true
должен помочь вернуть вещи к нормальному уровню.