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