Практическое руководство. Запись сведений о службах в журнал
Примечание.
Эта статья не относится к размещенным службам в .NET. Последние сведения об использовании Microsoft.Extensions.Hosting.BackgroundService служб Windows и шаблоне рабочей службы см. в следующих статье:
По умолчанию все проекты служб Windows могут взаимодействовать с журналом событий приложения и записывать в него сведения и исключения. Чтобы указать, что эта функциональность должна быть в вашем приложении, можно использовать свойство AutoLog . По умолчанию ведение журнала включено для любой службы, созданной с помощью шаблона проекта службы Windows. Можно использовать статическую форму класса EventLog для записи сведений в журнал, и тогда не потребуется создавать экземпляр компонента EventLog или вручную регистрировать источник.
Установщик службы автоматически регистрирует каждую службу в проекте как допустимый источник событий для журнала приложений на компьютере, где установлена служба, если включено ведение журнала. Служба записывает сведения каждый раз, когда служба запускается, останавливается, приостанавливается, возобновляется, устанавливается или удаляется. Она также записывает все возникающие ошибки. Вам не нужно писать никакой код для записи в журнал при использовании этого поведения по умолчанию; служба обрабатывает это автоматически.
Если вы хотите выполнять запись в другой журнал событий, отличный от журнала приложения, то необходимо задать для свойства AutoLog значение false
, создать собственный пользовательский журнал событий в коде службы и зарегистрировать службу в качестве источника записей для этого журнала. Затем вам придется написать код для выполнения записи в журнал всякий раз, когда происходит интересующее вас действие.
Примечание.
Если вы используете пользовательский журнал событий и настроили службу для записи в этот журнал, не пытайтесь обратиться к этому журналу до установки свойства ServiceName службы в коде. Журналу событий нужно значение этого свойства, чтобы зарегистрировать службу в качестве допустимого источника событий.
Включение ведения журнала событий по умолчанию для службы
Установите для свойства AutoLog вашего компонента значение
true
.Примечание.
По умолчанию для свойства задано значение
true
. Вам не нужно задавать это явно, если только вы не создаете более сложную обработку, такую как оценка условия и последующая установка свойства AutoLog в зависимости от результата этого условия.
Отключение ведения журнала событий для службы
Установите для свойства AutoLog вашего компонента значение
false
.AutoLog = false;
Me.AutoLog = False
Настройка ведения пользовательского журнала
Установите свойство AutoLog в значение
false
.Примечание.
Чтобы использовать пользовательский журнал, необходимо задать в свойстве AutoLog значение false.
Настройте экземпляр компонента EventLog в приложении службы Windows.
Создайте пользовательский журнал, вызвав метод CreateEventSource и задав исходную строку и имя файла журнала, который хотите создать.
Укажите в свойстве Source компонента EventLog исходную строку, созданную на шаге 3.
Выполняйте запись в журнал, вызывая метод WriteEntry в экземпляре компонента EventLog .
Следующий код показывает, как настроить ведение пользовательского журнала.
Примечание.
В этом примере кода экземпляр компонента EventLog называется
eventLog1
(EventLog1
в Visual Basic). Если на шаге 2 вы создали экземпляр с другим именем, измените код соответствующим образом.public UserService2() { _eventLog1 = new EventLog(); // Turn off autologging AutoLog = false; // create an event source, specifying the name of a log that // does not currently exist to create a new, custom log if (!EventLog.SourceExists("MySource")) { EventLog.CreateEventSource( "MySource", "MyLog"); } // configure the event log instance to use this source name _eventLog1.Source = "MySource"; _eventLog1.Log = "MyLog"; }
Public Sub New() ' Turn off autologging Me.AutoLog = False ' Create a new event source and specify a log name that ' does not exist to create a custom log If Not System.Diagnostics.EventLog.SourceExists("MySource") Then System.Diagnostics.EventLog.CreateEventSource("MySource", "MyLog") End If ' Configure the event log instance to use this source name EventLog1.Source = "MySource" End Sub
protected override void OnStart(string[] args) { // write an entry to the log _eventLog1.WriteEntry("In OnStart."); }
Protected Overrides Sub OnStart(ByVal args() As String) ' Write an entry to the log you've created. EventLog1.WriteEntry("In Onstart.") End Sub