2013-04-03 5 views
0

У меня возникает проблема в HttpHandler, когда исключение получает и обрабатывает Application_Error() в моем глобальном файле приложения (global.asax). Я пытаюсь написать exception.Message в источнике EventLog моего приложения.Global.asax Не записывается в приложение EventLog Source

И уточнить, прежде чем спросить, да, источник EventLog существует. Проблема, с которой я сталкиваюсь, заключается в том, что само исключение не записывается в источник EventLog моего приложения (для этого примера мы скажем, что источник журнала событий имеет имя HttpEndpoint), но вместо этого записывается в ASP.NET 4.0 .30319.0 источник журнала событий.

Есть ли способ обойти это без устранения метода global.asax Application_Error(), обертывания метода, который выполняется до того, как эта ошибка будет сброшена в try{}catch{} и таким образом будет записываться в источник журнала событий приложения?

Код в Application_Error() довольно штопать прямолинейно:

protected void Application_Error(object sender, EventArgs e) 
    { 
    var exception = Server.GetLastError(); 

    if (exception == null) 
    { 
     return; 
    } 

    // try casting exception to known types for more specific event log entries 
    var msmqOutputQueueWriteFailedException = exception as OutputMessageQueueWriteFailedException; 

    if (msmqOutputQueueWriteFailedException != null) 
    { 
     _windowsEventLog.LogFatal(_eventLogSource, string.Format(CultureInfo.CurrentCulture, "MSMQ Message Send Failure: {0} - InnerException Message: {1}", msmqOutputQueueWriteFailedException.Message, msmqOutputQueueWriteFailedException.InnerException.Message)); 
    } 

    _windowsEventLog.LogError(_eventLogSource, String.Format(CultureInfo.CurrentCulture, "Global Exception was thrown: {0}", exception.Message), exception); 
    } 

Источник журнала событий HttpEndpoint проводится как <AppSetting> в файле web.config, и назначается _eventLogSource члена в global.asax. Я также делаю другое ведение журнала внутри приложения к тому же источнику журнала событий (за пределами global.asax), и все работает просто отлично и денди.

Любые идеи? Любая помощь/обратная связь очень ценится.

ответ

1

Так что я сделал несколько экспериментов ... это, похоже, происходит из-за отливки от Exception до OutputMessageQueueWriteFailedException.

Если я не пытаюсь использовать тип исключения, и просто отправьте сообщение об исключении в журнал событий в строке _windowsEventLog.LogError() вместо _windowsEventLog.LogFatal(), оно будет записано в источник журнала событий, который я хочу.

Я не совсем уверен, почему именно это. Любые разработки по этой теме приветствуются!

 Смежные вопросы

  • Нет связанных вопросов^_^