Чтение онлайн

ЖАНРЫ

C# для профессионалов. Том II

Ватсон Карли

Шрифт:

 Класс

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
конфигурация регистрации событий отменяется. Если приложение просто удаляется, этот ключ реестра остается, если не будет вызван метод
EventLog.DeleteEventSource
.

Трассировка

Можно сделать так, чтобы все сообщения трассировки направлялись

в журнал событий. На самом деле это не нужно, так как в нормально работающей системе журнал событий будет перегружен сообщениями трассировки. Системный администратор пропустит действительно важные записи, если это произойдет. Помните, что тип записи события — это ошибка, предупреждение и информационное. При этом информационные сообщения редко являются информацией об успехе. Включение трассировочных сообщений в журнал событий может быть полезным свойством для тестирования проблемных служб. Трассировка возможна как с отладочным, так и с окончательным кодом.

Чтобы послать трассировочные сообщения в журнал событий, должен быть создан объект

EventLogTraceListener
и добавлен в список приемника класса
Trace
:

EventLogTraceListener listener = new EventLogTraceListener(eventLog1);

Trace.Listeners.Add(listener);

Теперь все трассировочные сообщения посылаются в журнал событий:

Trace.WriteLine("trace message");

Дополнительная информация о методах трассировки находится в главе 6.

Создание приемника событий

Теперь было бы полезно создать приложение, которое получает событие, когда в службе происходит что-то плохое. Мы создадим простое оконное приложение, отслеживающее события службы

Quote
:

Оконное приложение имеет только окно списка и кнопку выхода:

Компонент

EventLog
добавляется в этот проект перетаскиванием его из панели инструментов. Свойство
Log
задается как
Application
, a
Source
как источник службы
QuoteService
. Класс
EventLog
также имеет свойство
EnableRaisingEvents
. До сих пор мы не говорили об этом свойстве. По умолчанию для него используется значение false, задание его как true означает, что событие создается каждый раз, когда происходит это событие, и можно написать обработчик событий для оконного события
EntryWritten
.

В файле

EventListener.cs
свойства задаются в методе
InitializeComponent
:

private void InitializeComponent {

 this.eventLogQuote = new System.Diagnostics.EventLog;

 this.buttonExit = new System.Windows.Forms.Button;

 this.listBoxEvents = new System.Windows.Forms.ListBox;

 ((System.ComponentModel.ISupportInitialize)

(this.eventLogQuote)).BeginInit;

 this.SuspendLayout;

 //

 // eventLogQuote

 //

 this.eventLogQuote.EnableRaisingEvents = true;

 this.eventLogQuote.Log = "Application";

 this.eventLogQuote.Source = "QuoteService";

 this.eventLogQuote.SynchronizingObject = this;

 this.eventLogQuote.EntryWritten +=

new System.Diagnostics.EntryWrittenEventHandler(this.OnEntryWritten);

Поделиться с друзьями: