2009-01-31 2 views
4

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

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

EventLog eventLog = new EventLog("Application"); 
eventLog.Source = "My custom name"; 
eventLog.WriteEntry("Some error description ...", EventLogEntryType.Error); 

Однако, ASP.NET устанавливает это значение «ASP.NET», а затем его версии. Я кратко проверил документацию web.config, но не нашел очевидного места для его изменения. Интересно, можно ли вообще изменить.

ответ

2

Лучше всего использовать свойство источника, как задумано, но использовать класс установки в установщике настроить реестр во время установки (под администратором), например .:

 
using System; 
using System.Collections; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Configuration.Install; 
using System.Diagnostics; 

namespace InstallerClasses 
{ 
    [RunInstaller(true)] 
    public partial class EventLog : Installer 
    { 
     private EventLogInstaller eventLogInstaller; 

     /// 
     /// Creates the event log for MyApp 
     /// 
     public EventLog() 
     { 
      InitializeComponent(); 

      // Create an instance of an EventLogInstaller. 
      eventLogInstaller = new EventLogInstaller(); 

      // Set the source name of the event log. 
      eventLogInstaller.Source = "MySource"; 

      // Set the event log that the source writes entries to. 
      eventLogInstaller.Log = "Application"; 

      // Add myEventLogInstaller to the Installer collection. 
      Installers.Add(eventLogInstaller); 
     } 
    } 
} 

И убедитесь, он запускается как пользовательское действие в вашем установщике.

+0

Спасибо. Это подтверждает мое обнаружение, что свойство source не предназначено для использования в качестве специальной строки. –

0

Вы можете обрабатывать неперехваченные исключений в global.asax, а затем войти в Exception программно, как так:

void Application_Error(object sender, EventArgs e) 
{ 
    Exception ex = Server.GetLastError().GetBaseException(); 
    // logging code here 
} 
+0

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

1

кажется, что использование свойства источника не такая хорошая идея. Первоначально я думал, что это текст свободной формы. Но я только узнал, что это что-то, что нужно зарегистрировать через функцию RegisterEventSource (...) Win32 API, и это, похоже, работает только тогда, когда приложение работает под правами администратора. .NET тихо создает для вас новый источник, но если вы не администратор, он генерирует исключение. Поэтому в целом использование специального источника исходного кода внутри ASP.NET может потребовать предварительной предварительной регистрации, которая введет еще один шаг в развертывание.

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