HOW TO:記錄關於服務的資訊
根據預設,所有的 Windows 服務專案都可以和應用程式事件記錄檔互動,也可以寫入資訊和例外狀況。 您可以使用 AutoLog 屬性指出是否要在應用程式中使用此功能。 根據預設,以 Windows 服務專案範本建立的任何服務的記錄功能都處於開啟狀態。 您可以使用 EventLog 類別的靜態表單,將服務資訊寫入記錄檔中,而不需建立 EventLog 元件執行個體 或手動登錄來源。
當開啟記錄功能時,服務的安裝程式會自動登錄專案中的每一個服務,做為安裝服務的電腦的應用程式記錄檔之有效事件的來源。 服務會記錄每次啟動、停止、暫停、繼續、安裝和解除安裝服務的資訊, 也會記錄所發生的任何錯誤。 使用預設行為時,您不需撰寫任何程式碼即可將項目寫入記錄檔中;服務會自動為您處理。
如果您想要寫入應用程式記錄檔以外的其他事件記錄檔,您必須將 AutoLog 屬性設定為 false,在服務程式碼中建立自己的自訂事件記錄檔,並將服務登錄為該記錄檔的有效項目來源。 接著您必須撰寫程式碼,在您有興趣的動作發生時將項目記錄至記錄檔中。
注意事項 |
---|
如果您使用自訂事件記錄檔,並設定服務應用程式寫入此自訂記錄檔,在程式碼設定服務的 ServiceName 屬性之前,請不要嘗試存取該事件記錄檔。 此事件記錄檔需要此屬性值,才能將您的服務登錄為有效的事件的來源。 |
若要啟用服務的預設事件記錄功能
將元件的 AutoLog 屬性設定為 true。
注意事項 根據預設,這個屬性是設定為 true。 您不需要明確地設定這個屬性值,除非您要建置更複雜的處理,例如評估某個狀況,再依照該狀況的結果設定 AutoLog 屬性。
若要停用服務的事件記錄功能
將元件的 AutoLog 屬性設定為 false。
Me.AutoLog = False
this.AutoLog = false;
若要將記錄功能設定為使用自訂記錄檔
將 AutoLog 屬性設定為 false。
注意事項 您必須將 AutoLog 設定為 false,才能使用自訂記錄檔。
在您的 Windows 服務應用程式中建立 EventLog 元件的執行個體。
藉由呼叫 CreateEventSource 方法並指定來源字串及希望建立的記錄檔名稱,以建立自訂記錄檔。
藉由存取 EventLog 元件執行個體中的 WriteEntry 方法寫入項目。
下列程式碼顯示如何將記錄功能設定為使用自訂記錄檔。
注意事項 在這個程式碼範例中,EventLog 元件執行個體的名稱是 eventLog1(在 Visual Basic 中為 EventLog1)。 如果您在步驟 2 中使用其他名稱建立執行個體,請依該名稱變更程式碼。
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 Overrides Sub OnStart(ByVal args() As String) ' Write an entry to the log you've created. EventLog1.WriteEntry("In Onstart.") End Sub
public UserService2() { // Turn off autologging this.AutoLog = false; // create an event source, specifying the name of a log that // does not currently exist to create a new, custom log if (!System.Diagnostics.EventLog.SourceExists("MySource")) { System.Diagnostics.EventLog.CreateEventSource( "MySource","MyLog"); } // configure the event log instance to use this source name eventLog1.Source = "MySource"; } ... protected override void OnStart(string[] args) { // write an entry to the log eventLog1.WriteEntry("In OnStart."); }