В приложениях на ASP.NET Core отмена пользователем HTTP-запроса приводит к выбросу исключения OperationCanceledException. Попадая в логи, такие события создают лишний шум, затрудняя работу технической поддержки и мониторинг системы.

Попытки отфильтровать логи через конфигурацию NLog оказались безуспешными, так как логгер не имеет доступа к HttpContext. Использование middleware также не решило проблему, поскольку многие компоненты, например репозитории, успевают залогировать ошибку до того, как она дойдет до верхнего уровня конвейера.

Для решения задачи была использована библиотека Scrutor для декорирования ILoggerProvider. Этот подход позволяет перехватывать запись лога и проверять состояние HttpContext.RequestAborted, чтобы отсеивать штатные отмены запросов.

Декорирование ILoggerProvider обеспечивает полный охват, так как через него проходят логи, создаваемые через ILoggerFactory, включая системные компоненты вроде Kestrel и EF Core. Это делает решение системным, а не точечным.

При реализации необходимо учитывать, что логирование может происходить вне HTTP-контекста, поэтому важно корректно обрабатывать возможные null-значения. Также рекомендуется добавить рекурсивную проверку для вложенных исключений, таких как AggregateException.