Пользовательское значение свойства источника журнала событий для ошибок ASP.NET

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

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

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

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


person Jan Zich    schedule 31.01.2009    source источник


Ответы (3)


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

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);
        }
    }
}

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

person Chris KL    schedule 02.02.2009
comment
Спасибо. Это подтверждает мой вывод о том, что исходное свойство не предназначено для использования в качестве специальной строки. - person Jan Zich; 02.02.2009

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

person Jan Zich    schedule 01.02.2009

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

void Application_Error(object sender, EventArgs e)
{
    Exception ex = Server.GetLastError().GetBaseException();
    // logging code here
}
person davogones    schedule 31.01.2009
comment
Спасибо. Я знаю, что это лучше в целом, но я искал простой переключатель конфигурации. - person Jan Zich; 01.02.2009