У меня есть приложение .Net Compact Framework 3.5, которое использует Nlog версии 2.0 для регистрации информации, ошибок и фатальных исключений. В большинстве случаев ведение журнала работает должным образом и регистрирует фатальные исключения до сбоя. Но иногда наблюдается сбой приложения без каких-либо признаков ошибки / исключения.
Позвольте мне развить сценарий:
- Приложение создает несколько потоков, все потоки имеют блок try-catch, добавленный в начало их стеков вызовов. И, следовательно, регистрировать исключения плода перед сбоем.
- У основного потока есть «AppDomain.CurrentDomain.UnhandledException» для регистрации любых фетальных исключений в своем стеке вызовов.
- Приложение загружает некоторые сторонние управляемые библиотеки DLL и выполняет некоторые PInvokes для библиотек Wnce.
Но я считаю, что даже если какая-то сторонняя DLL выйдет из строя (или, скажем, она создаст новый поток, который выйдет из строя), я должен, по крайней мере, увидеть несколько ThreadAbortExceptions
в журнале, зарегистрированном потоком моего приложения перед выходом.
Ключевые параметры конфигурации Nlog:
а. FileTarget.AutoFlush = true
б. FileTarget.KeepFileOpen = false
c. FileTarget не заключен в какую-либо асинхронную оболочку или в какую-либо буферизованную оболочку.
Пожалуйста, дайте мне знать, если я что-нибудь упустил.