Протоколирование событий

40

Для получения критичных сообщений о работоспособности системы и приложений, а также информационных сообщений системный администратор использует программу Event Viewer (Просмотр событий). Чтобы сообщения об ошибках приложения могли быть прочитаны этой программой, они должны заноситься в журнал событий.

Чтобы обеспечить запись сообщений трассировки в журнал событий, понадобится сконфигурировать класс EventLogTraceListener. Класс EventLogTraceListener имеет ассоциированный с ним объект EventLog для записи элементов журнала событий. Для записи и чтения журналов событий можно также напрямую использовать класс EventLog.

Архитектура протоколирования событий

Информация журнала событий хранится в нескольких журнальных файлах. Наиболее важные из них — журналы приложений, безопасности и системы. В ветви HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Eventlog системного реестра для службы журнала событий предусмотрено несколько конфигурационных элементов, указывающих на определенные файлы. Файл журнала системы используется системой и драйверами устройств.

Приложения и службы осуществляют запись в журнал приложений. Журнал безопасности доступен приложениям только для чтения. Журнал безопасности используется средством аудита операционной системы. Каждое приложение может также создавать специальную категорию и файл журнала для записи в него журнала событий. Например, это делает приложение Media Center.

Для чтения этих событий применяется инструмент администрирования Event Viewer. Программа Event Viewer (Просмотр событий) может быть запущена непосредственно из окна Server Explorer (Проводник сервера) среды Visual Studio щелчком правой кнопкой мыши на элементе Event Logs и выбором в контекстном меню пункта Launch Event Viewer (Запустить Event Viewer). Пользовательский интерфейс программы Event Viewer показан на рис.:

Event Viewer

В журнале событий доступна следующая информация по каждому событию:

Классы протоколирования событий

Для записи журналов событий существуют два разных API-интерфейса Windows. Для одного из них, который доступен, начиная с Windows Vista, предусмотрены классы-оболочки в пространстве имен System.Diagnostics.Eventing, а для другого классы-оболочки находятся в пространстве имен System.Diagnostics.

Пространство имен System. Diagnostics содержит классы для протоколирования событий, перечисленные ниже:

EventLog

С помощью класса EventLog можно читать и записывать элементы журнала событий, а также устанавливать приложения в качестве источников событий.

EventLogEntry

Класс EventLogEntry представляет отдельный элемент журнала событий. С помощью EventLogEntryCollection можно выполнять итерации по элементам EventLogEntry.

EventLogInstaller

Класс EventLogInstaller — это установщик компонента EventLog. Для создания источника событий он обращается к EventLog.CreateEventSource().

EventLogTraceListener

С помощью EventLogTraceListener трассировки могут записываться в журнал событий. Этот класс является реализацией абстрактного класса TraceListener.

Ядром протоколирования событий является класс EventLog. Члены этого класс описаны в таблице:

EntriesС помощью свойства Entries можно читать журналы событий. Entries возвращает коллекцию EventLogEntryCollection, которая содержит объекты, хранящие информацию о событиях. Вызывать метод вроде Read() не понадобится. Коллекция заполняется при обращении к этому свойству.
LogВ свойстве Log указывается журнал для чтения или записи.
LogDisplayNameLogDisplayName — свойство только для чтения, которое возвращает отображаемое имя журнала.
MachineNameПосредством MachineName указывается система, на которой должно производиться чтение или запись элементов журнала.
SourceСвойство Source специфицирует источник элементов событий, подлежащих записи.
CreateEventSource()CreateEventSource() создает новый источник событий и новый файл журнала, если он указан при вызове этого метода.
DeleteEventSource()Метод вызывается DeleteEventSource(), когда необходимо избавиться от источника события.
SourceExists()С помощью этого метода можно проверить, существует ли источник событий перед его созданием.
WriteEntry()Запись элементов журнала событий. Метод WriteEntry() проще, так как ему необходимо только передать строку.
WriteEvent()WriteEvent() более гибкий, поскольку можно использовать файлы сообщений, которые не зависят от приложения и поддерживают локализацию.
Clear()Метод Clear() удаляет все элементы из журнала событий.
Delete()Метод Delete() удаляет целиком журнал событий.

Перед записью событий потребуется создать источник событий. Для этого можно использовать метод CreateEventSource() класса EventLog либо класс EventLoglnstaller. Поскольку при создании источника событий нужны административные привилегии, программа установки является более подходящим выбором.

В следующем примере осуществляется проверка наличия источника событий по имени EventLogDemoApp. Если он не существует, создается объект типа EventSourceCreationData, который определяет имя источника EventLogDemoApp и имя журнала ProCSharpLog. Все события данного источника пишутся в журнал событий ProCSharpLog. По умолчанию это журнал приложений:

string logName = "ProCSharpLog";
            string sourceName = "EventLogDemoApp";
            if (!EventLog.SourceExists(sourceName))
            {
                var eventSourceData = new EventSourceCreationData(sourceName, logName);
                EventLog.CreateEventSource(eventSourceData);
            }

Имя источника событий — это идентификатор приложения, которое пишет элементы журнала событий. Системному администратору, читающему журнал, эта информация помогает идентифицировать элементы журнала событий для отображения их на категории приложения. Примерами имен источников событий могут служить LoadPerf — для монитора производительности, MSSQLSERVER — для Microsoft SQL Server, MsiInstaller — для Windows Installer, Winlogon, Tcpip, Time-Service и т.д.

Установка имени Application для журнала событий приводит к записи элементов событий в журнал приложений. Можно также создать собственный журнал, указав имя журнала событий. Файлы журнала располагаются в каталоге <windows>\System32\WinEvt\Logs.

С помощью EventSourceCreationData допускается также задавать еще несколько характеристик для журнала событий.

Пройди тесты
Лучший чат для C# программистов