Как вести журналирование сведений о службах

Замечание

Эта статья не относится к размещенным службам в .NET. Последние сведения об использовании Microsoft.Extensions.Hosting.BackgroundService служб Windows и шаблоне рабочей службы см. в следующих статье:

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

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

Если вы хотите записать в журнал событий, отличный от журнала приложений, необходимо задать AutoLog свойство false, создать собственный пользовательский журнал событий в коде служб и зарегистрировать службу в качестве допустимого источника записей для этого журнала. Затем необходимо написать код для записи записей в журнал всякий раз, когда возникает нужное действие.

Замечание

Если вы используете пользовательский журнал событий и настраиваете приложение-службу для записи в него, перед настройкой свойства службы ServiceName в коде не следует пытаться получить доступ к журналу событий. Журнал событий должен иметь значение этого свойства, чтобы зарегистрировать службу в качестве допустимого источника событий.

Включение ведения журнала событий по умолчанию для службы

  • Задайте свойство true для компонента AutoLog.

    Замечание

    По умолчанию для свойства задано значение true. Этот параметр не требуется задавать явно, если вы не создаете более сложную обработку, например вычисление условия, а затем задание AutoLog свойства на основе результата этого условия.

Отключение ведения журнала событий для службы

  • Задайте свойство false для вашего компонента AutoLog.

    AutoLog = false;
    
    Me.AutoLog = False
    

Настройка ведения журнала в кастомном журнале

  1. Задайте для свойства AutoLog значение false.

    Замечание

    Для использования пользовательского журнала необходимо установить AutoLog в значение false.

  2. Установите экземпляр компонента EventLog в приложении службы Windows.

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

  4. Установите свойство Source экземпляра компонента EventLog на исходную строку, созданную на шаге 3.

  5. Записывайте данные, используя метод WriteEntry экземпляра компонента 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
    

См. также