Пользовательское значение для свойства источника журнала событий для ошибок ASP.NET - PullRequest
4 голосов
/ 01 февраля 2009

По умолчанию 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, но не нашел очевидного места для ее изменения. Интересно, можно ли это вообще изменить.

Ответы [ 3 ]

2 голосов
/ 02 февраля 2009

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

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

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

1 голос
/ 01 февраля 2009

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

0 голосов
/ 01 февраля 2009

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

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