Procedura: registrare informazioni sui servizi

Nota

Questo articolo non si applica ai servizi ospitati in .NET. Per il contenuto più recente sui servizi Windows che usano Microsoft.Extensions.Hosting.BackgroundService e il modello di servizio del ruolo di lavoro, vedere:

Per impostazione predefinita, tutti i progetti di servizio di Windows possono interagire con il log eventi dell'applicazione in cui possono scrivere informazioni ed eccezioni. È possibile usare la proprietà AutoLog per indicare se si vuole fornire questa funzionalità nell'applicazione. Per impostazione predefinita, la registrazione è attivata per tutti i servizi creati con il modello di progetto di servizio di Windows. È possibile usare un form statico della classe EventLog per scrivere le informazioni sul servizio in un log senza dover creare un'istanza di un componente EventLog o registrare manualmente un'origine.

Il programma di installazione del servizio registra automaticamente ogni servizio nel progetto come origine valida degli eventi con il registro applicazioni sul computer in cui è installato il servizio, quando la registrazione è attivata. Il servizio registra informazioni ogni volta che viene avviato, arrestato, sospeso, riavviato, installato o disinstallato, oltre a registrare tutti gli errori che si verificano. Non è necessario scrivere nessun codice per scrivere voci nel registro quando si usa il comportamento predefinito, perché è il servizio a farlo automaticamente.

Per scrivere in un registro eventi diverso dal registro applicazioni, è necessario impostare la proprietà AutoLog su false, creare il proprio registro eventi personalizzato nel codice dei servizi e registrare il servizio come origine valida delle voci di tale log. È quindi necessario scrivere il codice per registrare le voci nel log quando si verifica un'azione a cui si è interessati.

Nota

Se si usa un registro eventi personalizzato e si configura l'applicazione di servizio perché vi possa scrivere, è necessario non tentare di accedere al registro eventi prima di impostare la proprietà ServiceName del servizio nel codice. Il registro eventi ha bisogno del valore di questa proprietà per registrare il servizio come origine valida degli eventi.

Per abilitare la registrazione predefinita degli eventi per il servizio

  • Impostare la proprietà AutoLog del componente su true.

    Nota

    Per impostazione predefinita, questa proprietà è impostata su true. Non è necessario impostarla esplicitamente a meno che non si debba eseguire un'elaborazione più complessa, ad esempio la valutazione di una condizione seguita dall'impostazione della proprietà AutoLog in base al risultato di tale condizione.

Per disabilitare la registrazione degli eventi per il servizio

  • Impostare la proprietà AutoLog del componente su false.

    AutoLog = false;
    
    Me.AutoLog = False
    

Per configurare la registrazione in un log personalizzato

  1. Impostare la proprietà AutoLog su false.

    Nota

    È necessario impostare AutoLog su false per usare un log personalizzato.

  2. Configurare un'istanza di un componente EventLog nell'applicazione di servizio di Windows.

  3. Creare un log personalizzato chiamando il metodo CreateEventSource e specificando la stringa di origine e il nome del file di log che si vuole creare.

  4. Impostare la proprietà Source sull'istanza del componente EventLog per la stringa di origine creata nel passaggio 3.

  5. Scrivere le voci accedendo al metodo WriteEntry nell'istanza del componente EventLog .

    Il codice seguente illustra come configurare la registrazione in un log personalizzato.

    Nota

    In questo esempio di codice un'istanza di un componente EventLog è denominata eventLog1 (EventLog1 in Visual Basic). Se si è creata un'istanza con un altro nome nel passaggio 2, modificare il codice di conseguenza.

    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
    

Vedi anche