
Регистрация событий
Службы могут сообщать об ошибках и другую информацию, отмечая ее в журнале событий. Служебный класс, производный из ServiceBase
, автоматически регистрирует события, когда свойство AutoLog
задано как true. Класс ServiceBase
проверяет это свойство и заносит запись в журнал при событиях запуска, остановки, паузы и продолжения. Вот пример журнальной записи, сделанной службой.

Для регистрации специальных событий можно использовать классы из пространства имен System.Diagnostics
.
Архитектура регистрации событий
По умолчанию Event Log (Журнал событий) хранится в трех файлах журналов: Application, Security и System. Просматривая конфигурацию реестра службы регистрации событий, можно увидеть три записи в HKLMSystemCurrentControlSetServicesEventLog
с конфигурациями, указывающими на определенные файлы. Файл журнала System используется из драйверов системы и устройств, приложения и службы записывают в журнал Application. Security является журналом только для чтения приложений. Свойство аудита операционной системы использует журнал Security.
Можно прочитать эти события с помощью административной утилиты Event Viewer. Event Viewer запускается непосредственно из Server Explorer, входящего в Visual Studio.NET. Сделайте щелчок правой кнопкой мыши на пункте Event Logs и выберите запись Launch Event Viewer из контекстного меню:

В журнале событий будет помещена следующая информация:
□ Type может быть Information, Warning и Error. Information — это редкая успешная операция, Warning — проблема, которая не является немедленно значимой, и Error — основная проблема. Дополнительными типами являются FailureAudit и SuccessAudit, но эти типы используются только для журнала Security.
□ Date и Time показывают время, когда происходит событие.
□ Source — имя программного обеспечения, регистрирующего событие. Source для журнала Application конфигурируется в HKLMSystemCurrentControlSetServicesEventLogApplication
. Под этим ключом конфигурируется значение EventMessageFile
для указания на DLL ресурса, который содержит сообщения об ошибках.
□ Category можно определить так, чтобы журналы событий фильтровались при использовании Event View.
□ Идентификатор события определяет сообщение об определенном событии.
Классы регистрации событий
Пространство имен System.Diagnostics
имеет несколько классов для регистрации событий:
□ С помощью класса EventLog
можно прочитать и внести записи в журнал событий, а также определить приложения как источники событий.
□ EventLogEntry
является единственным входом в журнал событий. С помощью EventLogEntryCollection
можно просмотреть EventLogEntry
.
□ Класс EventLogInstaller
предназначен для установки компонента EventLog
. EventLogInstaller
вызывает EventLog.CreateEventSource()
для создания источника событий.
□ С помощью EventLogTraceListener
можно записать в журнал событий трассировки. Этот класс реализует абстрактный класс TraceListener
.
Добавление регистрации событий
Если свойство AutoLog
класса ServiceBase
задано как true, то автоматически включается регистрация событий. Класс ServiceBase
регистрирует информационное событие при запросах службы для запуска, остановки, паузы и продолжения. В классе ServiceInstaller
создается экземпляр EventLogInstaller
, чтобы сконфигурировать источник журнала событий. Этот источник журнала событий имеет такое же имя, как и служба. Для записи события используем статический метод WriteEntry()
класса EventLog
. Свойство Source
было уже задано в классе ServiceBase
:
EventLog.WriteEntry('event log message');
Этот метод регистрирует информационное событие. Если должно быть создано событие предупреждения или ошибки, то для определения этого типа используется перезагруженный метод WriteEvent()
:
EventLog.WriteEntry('event log message', EventLogEntryType.Warning);
EventLog.WriteEntry('event log message', EventLogEntryType.Error);
Для служб класс ServiceBase
автоматически добавляет свойства регистрации событий. Если желательно использовать регистрацию событий в других типах приложений, это легко делается с помощью Visual Studio.NET.
□ Используйте ToolBox для добавления компонента EventLog
в конструктор.
□ Задайте свойство Log
компонента EventLog
как Application
, а свойство Source
как выбранное имя. Обычно это бывает имя приложения, которое показано в Event View.
□ Теперь можно записать журналы с помощью метода WriteEntry()
экземпляра EventLog
.
□ Можно добавить программу установки из пункта контекстного меню Add Installer компонента EventLog
. Это создает класс ProjectInstaller
, который конфигурирует источник событий в реестре.
□ С помощью команды installutil
теперь можно зафиксировать приложение, installutil
вызывает класс ProjectInstaller
и регистрирует источник событий.
Для установки типа хсору последние два шага на самом деле не нужны. Если задано свойство Source
экземпляра EventLog
, источник автоматически регистрируется, когда журнал событий заполняется в первый раз. Это действительно легко сделать, но для реального приложения предпочтительнее добавить программу установки: с помощью installutil /u
конфигурация