Como registrar informações sobre serviços

Observação

Este artigo não se aplica aos serviços hospedados no .NET. Para obter o conteúdo mais recente dos serviços Windows usando Microsoft.Extensions.Hosting.BackgroundService e o modelo do Serviço de Trabalho, consulte:

Por padrão, todos os projetos do Serviço Windows têm a capacidade de interagir com o log de eventos do aplicativo e gravar informações e exceções nele. Você usa a AutoLog propriedade para indicar se deseja essa funcionalidade em seu aplicativo. Por padrão, o log é ativado para qualquer serviço criado com o modelo de projeto Windows Service. Você pode usar uma forma estática da EventLog classe para gravar informações de serviço em um log sem precisar criar uma instância de um EventLog componente ou registrar manualmente uma origem.

O instalador do serviço registra automaticamente cada serviço no seu projeto como uma fonte válida de eventos no Log do Aplicativo do computador onde o serviço está instalado, quando o registro em log está ativado. O serviço registra informações sempre que o serviço é iniciado, parado, pausado, retomado, instalado ou desinstalado. Ele também registra todas as falhas que ocorrem. Você não precisa escrever nenhum código para gravar entradas no log ao usar o comportamento padrão; o serviço lida com isso automaticamente.

Se você quiser gravar em um log de eventos diferente do log de Aplicativos, deverá definir a propriedade AutoLog para false, criar seu próprio log de eventos personalizado em seu código de serviço e registrar seu serviço como uma fonte válida de entradas para esse log. Em seguida, você deve escrever código para registrar entradas no log sempre que uma ação em que você estiver interessado ocorrer.

Observação

Se você usar um log de eventos personalizado e configurar seu aplicativo de serviço para gravar nele, não deverá tentar acessar o log de eventos antes de definir a propriedade do serviço ServiceName em seu código. O log de eventos precisa do valor dessa propriedade para registrar seu serviço como uma fonte válida de eventos.

Para habilitar o log de eventos padrão para seu serviço

  • Defina a AutoLog propriedade do componente como true.

    Observação

    Por padrão, essa propriedade é definida como true. Você não precisa definir isso explicitamente, a menos que esteja criando um processamento mais complexo, como avaliar uma condição e, em seguida, definir a AutoLog propriedade com base no resultado dessa condição.

Para desabilitar o log de eventos para seu serviço

  • Defina a AutoLog propriedade do componente como false.

    AutoLog = false;
    
    Me.AutoLog = False
    

Para configurar o registro em log em um log personalizado

  1. Defina a propriedade AutoLog como false.

    Observação

    Você deve definir AutoLog como false para usar um log personalizado.

  2. Configure uma instância de um componente EventLog em seu aplicativo do Serviço do Windows.

  3. Crie um log personalizado chamando o CreateEventSource método e especificando a cadeia de caracteres de origem e o nome do arquivo de log que você deseja criar.

  4. Defina a Source propriedade na instância do componente EventLog como a cadeia de caracteres de origem que você criou na etapa 3.

  5. Escreva suas entradas acessando o método WriteEntry na instância do componente EventLog.

    O código a seguir mostra como configurar o registro em um log personalizado.

    Observação

    Neste exemplo de código, uma instância de um EventLog componente é nomeada eventLog1 (EventLog1 no Visual Basic). Se você criou uma instância com outro nome na etapa 2, altere o código adequadamente.

    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
    

Consulte também