можно, чтобы .NET автоматически записывал сообщение об исключении в журнал событий при возникновении необработанного исключения? - PullRequest
0 голосов
/ 24 августа 2018

У меня есть неинтерактивное приложение, в котором мне нужно загрузить некоторые строковые поля перед созданием файла журнала. Есть метод, который читает содержимое текстового файла в поле. Если путь не существует, я хочу, чтобы исключение в журнале событий приложения указывало путь, к которому пытались получить доступ. Вот что я попробовал:

try 
{
    string contents = File.ReadAllText(path);
}
catch (FileNotFoundException)
{
    throw new FileNotFoundException(string.Format("Path not found: {0}",path));
}

Когда я запускаю тестовое приложение с этим кодом, текст исключения в окне консоли выглядит так:

Unhandled Exception: System.IO.FileNotFoundException: Path not found: C:\temp\notthere.txt

Однако сведения об исключении, записанные в журнале событий, не включают текст сообщения об исключении:

Application: ConsoleApp3.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.IO.FileNotFoundException
    at ConsoleApp3.Program.Main(System.String[])

Можно ли заставить .NET автоматически регистрировать больше деталей об исключениях, или мне просто нужно добавить код для записи в журнал событий самостоятельно?

1 Ответ

0 голосов
/ 24 августа 2018

Один из подходов, который вы можете использовать, - обработать событие AppDomain.CurrentDomain.UnhandledException:

using System;
using System.Diagnostics;

namespace Scratch
{
    class Program
    {
        static void Main(string[] args)
        {
            AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;

            throw new Exception("Uh oh!");
        }

        private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
        {
            using (var eventLog = new EventLog("Application"))
            {
                eventLog.Source = "Application";
                eventLog.WriteEntry($"Unhandled exception {(e.ExceptionObject as Exception).Message}");
            }
        }
    }
}

Обрабатывая это событие, вы получаете возможность реагировать на Исключение, которое вы можете записать в журнал событий самостоятельно или в свою собственную цель регистрации.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...