ASP.NET/C#: Как извлечь информацию из объекта Exception? - PullRequest
0 голосов
/ 23 октября 2009

Я использую стороннее приложение, которое предоставляет API для использования их системы регистрации событий. Я хочу перехватить исключение на уровне метода в своем коде и передать это исключение в систему регистрации событий стороннего производителя. Но я не знаю, как извлечь eventid, category и EventType из стандартного объекта Exception, чтобы я мог передать его в Write (строковое сообщение, строковая категория, int eventID, EventType eventType).

public EventLogs 
{
    private EventLogs()
    {
    }    
    public static void Write(EventLogEntry entry)
    {
        try
        {
            if (Globals.IsNullorEmpty(entry.MachineName))
            {
                entry.MachineName = Environment.MachineName;
            }
            if (!Globals.IsNullorEmpty(entry.Message))
            {
                entry.Message = Globals.HtmlEncode(entry.Message);
            }
            CommonDataProvider.Instance().WriteEventLogEntry(entry);
        }
        catch
        {
        }
    }

    public static void Write(string message, string category, int eventID, EventType eventType)
    {
        Write(message, category, eventID, eventType, -1);
    }

    public static void Write(string message, string category, int eventID, EventType eventType, int settingsID)
    {
        Write(new EventLogEntry { Message = message, Category = category, EventID = eventID, EventType = eventType, SettingsID = settingsID });
    }
}

Ответы [ 3 ]

1 голос
/ 23 октября 2009

Параметры для вызова Write () не имеют конкретного отношения к объектам исключений .NET. Эти параметры, однако, близко соответствуют элементам, хранящимся в обычном журнале событий Windows. В зависимости от используемой вами системы ведения журнала, эти данные могут отображаться или не отображаться в журнале событий Windows. Вполне вероятно, что их дизайн предназначен для имитации журнала событий Windows.

То, что вы указываете для параметров, зависит от ваших потребностей и целей. Некоторым людям нравится сохранять результаты Exception.ToString () в сообщении, имя приложения или домена приложения в категории и определенный пользователем идентификатор для идентификатора события.

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

И последнее, нетипично хранить 0 в качестве идентификатора события для ошибок. Это может привести к потере другим ИТ-персоналом собственных инструментов сканирования журналов.

System.Exception @ MSDN
Свойства System.Exception @ MSDN

0 голосов
/ 24 октября 2009

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

catch(Exception exc)
{
    Console.Write(exc.Message);
}

System.Exception является базовым классом для всех исключений, поэтому он может представлять любое выбрасываемое исключение. См. Все члены класса исключений из MSDN.

Edit: Стандартный объект исключения .NET не имеет eventid, category и EventType, поэтому вы должны решить, что это будет, перед записью в стороннюю утилиту ведения журнала.

Например, вы можете классифицировать исключения в зависимости от типа исключения, потому что вы можете различать их при перехвате следующим образом:

catch(FileNotFoundException fnfExc)
{
    Logger.Log(fnfExce.Message, CategoryEnum.DiskError);
}
catch(FilePermissionError permExc)
{
    Logger.Log(permExc.Message, CategoryEnum.DiskError);
}
catch(Exception exc)  { //catches anything else not caught above
    Logger.Log(exc.Message, CategoryEnum.Uknown);
}
0 голосов
/ 23 октября 2009

Ваше исключение не содержит эту информацию.

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

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

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

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