共用方式為


作法:記錄關於服務的資訊

注意

本文不適用於 .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
    

設定記錄至自訂的記錄檔

  1. AutoLog 屬性設為 false

    注意

    您必須將 AutoLog 設為 false 以使用自訂的記錄檔。

  2. 在 Windows 服務應用程式中,設定 EventLog 元件的執行個體。

  3. 藉由呼叫 CreateEventSource 方法並指定來源字串和您要建立之記錄檔的名稱,建立自訂的記錄檔。

  4. Source 元件執行個體上的 EventLog 屬性設為您在步驟 3 中建立的來源字串。

  5. 藉由存取 WriteEntry 元件執行個體上的 EventLog 方法,撰寫您的項目。

    下列程式碼示範如何設定記錄至自訂的記錄檔。

    注意

    在此程式碼範例中, EventLog 元件的執行個體命名為 eventLog1 (在 Visual Basic 中為EventLog1 )。 如果您在步驟 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
    

另請參閱