Como: Registrar em log 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 sobre os Serviços Windows usando Microsoft.Extensions.Hosting.BackgroundService e o modelo de Serviço de Trabalho, confira:

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

O instalador do serviço registra automaticamente cada serviço no projeto como uma fonte de eventos válida no log do aplicativo no computador no qual o serviço está instalado, quando o registro em log está habilitado. O serviço registra informações sempre que é iniciado, interrompido, colocado em pausa, retomado, instalado ou desinstalado. Ele também registra 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 faz isso automaticamente.

Se você quiser gravar em um log de eventos que não seja o log do aplicativo, será necessário definir a propriedade AutoLog como false, criar seu próprio log de eventos personalizado no código de serviços e registrar o serviço como uma fonte válida de entradas para esse log. Em seguida, você precisará escrever o código para registrar entradas no log sempre que ocorrer uma ação do seu interesse.

Observação

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

Para habilitar o registro em log de eventos padrão para o serviço

  • Defina a propriedade AutoLog do componente para 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 propriedade AutoLog com base no resultado dessa condição.

Para desabilitar o registro em log de eventos para o serviço

  • Defina a propriedade AutoLog do componente para false.

    AutoLog = false;
    
    Me.AutoLog = False
    

Para configurar o registro em um log personalizado

  1. Defina a propriedade AutoLog como false.

    Observação

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

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

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

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

  5. Grave as 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 componente EventLog é chamada de eventLog1 (EventLog1 em Visual Basic). Se você criar 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
    

Confira também