Есть приложение, к которому приходит запрос и приложение его обрабатывает. В процессе обработки могут вылезти болячки, которые надо залогировать во время исключения, но вместе с этим необходимо залогировать весь этап обработки (до исключения). Если же запрос отработал без болячек - логировать ничего не требуется.
Итак, сам вопрос в том, есть ли какие-либо уже созданные решения, которые позволили бы хранить промежуточные сообщения во время обработки запроса и логировать их при перехвате исключения и удалять эти промежуточные сообщения при успешной отработке запроса?
Заранее спасибо
Готовых обёрток нет. Реализовать можешь самостоятельно.
Для того, чтобы отловить момент возникновения ошибки, подпишись на событие FirstChanceException.
Для того, чтобы твоё решение нормально работало в многопоточной среде, можешь использовать AsyncLocal в качестве хранилища.
Только учитывай, что с таким подходом, тебе нужно жёстко контролировать все возникающие в приложении исключения, и ты не имеешь права их гасить и продолжать операцию в том же контексте.
Чуть более гибкое решение будет заключаться в ручном вызове логирования в блоке catch. Таким образом ты сможешь залогировать и полный стек исключения, и отсечь те ошибки, которые логировать не требуется.
Только учти, что отсутствие готовых решений обусловлено, в основном, нежизнеспособностью данного подхода. Когда каждая операция запускается в изолированном домене - это хорошо. Но в многопоточной среде с общими ресурсами, у тебя успешное выполнение одной операции может повлечь отвал другой (хотя бы на одновременном доступе к непотокобезопасной коллекции), и с таким подходом ты потеряешь необходимую информацию и будешь долго гадать - в чём же причина случившегося.
Такой подход может быть оправдан, если ты напишешь собственную виртуальную машину, которая будет, как GC, саспендить все потоки в момент возникновения исключения и делать такой своеобразный мини-дамп состояния по всему приложению, но это больше подойдёт дипломному проекту, нежели принесёт реальную пользу в продакшене.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости