2014-01-07 2 views
0

Я создал консольное приложение, которое успешно регистрирует сообщения при первом входе в систему с Main(). То, что я хотел бы сделать, это настроить обработчик для обработки всех необработанных исключений:NLog - Занесение сложности при привязке к UnhandledExceptionEventHandler

class Program 
    { 
     private static Logger logger = LogManager.GetCurrentClassLogger(); 
     static void Main(string[] args) 
     { 
      AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); 
      throw new ApplicationException("Throwing an unhandled exception!"); //This line keeps getting hit 
      Console.ReadLine(); 
     } 

     private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) 
     { 
      var exc = (Exception)e.ExceptionObject; 
      logger.ErrorException("Another exception occured!", exc); 
     } 
    } 

Это приложение никогда не выгружается, и я пытаюсь выяснить, почему. Он бросает мой ApplicationException, а затем выполняется CurrentDomain_UnhandledException(), но затем отладчик возвращается к строке: throw new ApplicationException(). CurrentDomain_UnhandledException() выполняется снова, а затем я зациклился на линии, бросая исключение в бесконечность и дальше.

И хотя вызывается logger.ErrorException(), ничего не записывается в базу данных.

ответ

1

Для первой части, что происходит за пределами отладки при ее запуске в обычном режиме?

Я подозреваю, что, когда вы отлаживаетесь, когда он поднят, отладчик разворачивает стоп-колл, таким образом, вы оказываетесь в том же месте, где было исключено исключение, поэтому постоянное избиение продолжается, вы не получаете нигде.

Я верю, что есть возможность предотвратить это поведение, см. Tools >> Options >> Debugging >> General.

Однако я бы оставил его и принял это как предполагаемое поведение (при условии, что необработанные исключения корректно обрабатываются вне отладки).

enter image description here

Что касается второй части, на что я не уверен, что может быть, что все Appender вы используете просто не получить шанс потопить. Я бы переключился на файл и посмотрел, если он зарегистрируется там, чтобы проверить это.