作法:記錄關於服務的資訊
注意
本文不適用於 .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
設定記錄至自訂的記錄檔
將 AutoLog 屬性設為
false
。注意
您必須將 AutoLog 設為 false 以使用自訂的記錄檔。
在 Windows 服務應用程式中,設定 EventLog 元件的執行個體。
藉由呼叫 CreateEventSource 方法並指定來源字串和您要建立之記錄檔的名稱,建立自訂的記錄檔。
藉由存取 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