逐步解說:探索事件記錄檔、事件來源和項目
更新:2007 年 11 月
這份逐步解說將帶領您逐一檢視 Visual Studio 應用程式中事件記錄的主要功能領域。在此逐步解說期間,您將了解如何進行下列作業:
建立 EventLog 元件。
寫入程式碼來建立和刪除自訂事件記錄檔。
將各種類型的項目寫入自訂記錄檔。
從自訂記錄檔讀取項目。
驗證記錄檔和事件來源 (Event Source) 是否存在。
清除記錄項目。
使用 [伺服器總管] 來驗證事件記錄檔動作的結果。
注意事項: |
---|
您的電腦可能會在下列說明中,以不同名稱或位置顯示某些 Visual Studio 使用者介面項目。您所擁有的 Visual Studio 版本以及使用的設定會決定這些項目。如需詳細資訊,請參閱 Visual Studio 設定。 |
建立使用者介面
在這份逐步解說中,您將建立 Windows 應用程式並使用一系列的控制項,來啟動一連串的事件記錄動作。
若要為您的應用程式建立表單和控制項
從 [新增專案] 對話方塊中,建立 Visual Basic 或 Visual C# [Windows 應用程式],並將它命名為 EventLogApp1。
將八個按鈕加入至該表單,並為這些按鈕設定下列屬性 (Property):
控制項
Text 屬性
Name 屬性
Button1
建立自訂記錄檔
CreateLog
Button2
刪除記錄檔
DeleteLog
Button3
將項目寫入記錄檔
WriteEntry
Button4
清除記錄檔
ClearLog
Button5
驗證記錄是否存在
VerifyLog
Button6
驗證來源是否存在
VerifySource
Button7
移除事件來源
RemoveSource
Button8
讀取項目
ReadEntry
接著,針對每個按鈕採取下列步驟:
在設計工具中,按兩下按鈕來建立這個按鈕的預設事件處理常式。隨即會出現程式碼編輯器,以及按鈕之 Click 事件的副程式。
回到 [設計] 檢視,接著在下一個按鈕上按兩下。
繼續以上的步驟,直到所有按鈕都建立了預設事件處理常式副程式為止。
從 [工具箱] 的 [元件] 索引標籤中,將 EventLog 元件拖曳至表單。
EventLog 元件執行個體 (Instance) 隨即會出現在表單下方的元件匣區域中。
建立和刪除自訂記錄檔
在以下程序中,您將使用 SourceExists 方法,來驗證所使用的來源是否存在,接著利用不存在的記錄檔名來呼叫 CreateEventSource。由於這個記錄檔不存在,因此在執行這段程式碼時,系統會為您建立自訂記錄檔。
若要建立自訂記錄檔
在程式碼編輯器中,找出 CreateLog_Click 程序。
輸入以下程式碼。事件記錄檔和原始檔是配對建立的,而原始檔在事件記錄檔建立前不可以先存在。在建立事件記錄檔後,會設定 EventLog 元件,以存取新的事件記錄檔。
' Source cannot already exist before creating the log. If EventLog.SourceExists("Source1") Then EventLog.DeleteEventSource("Source1") End If ' Logs and Sources are created as a pair. EventLog.CreateEventSource("Source1", "NewLog1") ' Associate the EventLog component with the new log. EventLog1.Log = "NewLog1" EventLog1.Source = "Source1"
// Source cannot already exist before creating the log. if (System.Diagnostics.EventLog.SourceExists("Source1")) { System.Diagnostics.EventLog.DeleteEventSource("Source1"); } // Logs and Sources are created as a pair. System.Diagnostics.EventLog.CreateEventSource("Source1", "NewLog1"); // Associate the EventLog component with the new log. eventLog1.Log = "NewLog1"; eventLog1.Source = "Source1";
安全性注意事項: 在建立事件記錄檔時,如果資源已經存在,就必須決定因應措施。另一個也許是惡意的處理序 (Process),可能已經建立事件記錄檔,而且擁有其存取權限。將資料置於事件記錄檔時,其他處理序可以使用該資料。
若要刪除自訂記錄檔
在程式碼編輯器中,找出 DeleteLog_Click 程序。
輸入以下程式碼:
If EventLog.Exists("NewLog1") Then EventLog.Delete("NewLog1") End If
if (System.Diagnostics.EventLog.Exists("NewLog1")) { System.Diagnostics.EventLog.Delete("NewLog1"); }
將項目寫入記錄檔
在以下程序中,您將使用之前所建立的 EventLog 元件執行個體,以便將項目寫入記錄檔。為達此目的,您會先設定元件以使用剛才建立的來源字串。然後,您會指定兩個要寫入的項目:一個是資訊事件,另一個則是錯誤事件。
若要將項目寫入記錄檔
在程式碼編輯器中,找出 WriteEntry_Click 程序。
輸入以下程式碼。這個程式碼會使用多載的 WriteEntry 方法寫入至事件記錄檔。顯示的第二個表單可讓您指定訊息的類型。如果您使用本主題稍後「測試您的程式碼」一節中的 [伺服器總管] 檢視項目,則不同類型的項目會以不同圖示表示。
EventLog1.WriteEntry("This is an informational message") EventLog1.WriteEntry("This is an error message", _ Diagnostics.EventLogEntryType.Error)
eventLog1.WriteEntry("This is an informational message"); eventLog1.WriteEntry("This is an error message", System.Diagnostics.EventLogEntryType.Error);
清除記錄項目
在以下程序中,您將使用 Clear 方法,從自訂記錄檔移除現有項目。
若要清除記錄項目
驗證記錄檔和來源
在此程序中,您將建立兩個程序:一個會驗證自訂記錄檔是否存在,另一個則是驗證來源字串是否存在。這些程序將用來在您執行專案時,測試您執行各種動作的結果。
若要驗證自訂記錄檔是否存在
在程式碼編輯器中,找出 VerifyLog_Click 程序。
建立訊息方塊來評估指定事件記錄檔是否存在,並依此顯示是或否。使用這段程式碼:
Dim logExists As Boolean = EventLog.Exists("NewLog1") MessageBox.Show("Does the log exist? " & logExists.ToString())
bool logExists = System.Diagnostics.EventLog.Exists("NewLog1"); MessageBox.Show("Does the log exist? " + logExists.ToString());
若要驗證來源是否存在
在程式碼編輯器中,找出 VerifySource_Click 程序。
建立訊息方塊來評估指定來源是否存在,並依此顯示是或否。使用這段程式碼:
Dim sourceExists As Boolean = EventLog.SourceExists("Source1") MessageBox.Show("Does the source exist? " + sourceExists.ToString())
bool sourceExists = System.Diagnostics.EventLog.SourceExists("Source1"); MessageBox.Show("Does the source exist? " + sourceExists.ToString());
移除來源
在以下程序中,您將寫入程式碼來刪除來源字串。若要這麼做,您必須先驗證要使用的來源 (Source1) 是否存在,然後呼叫 DeleteEventSource 方法以移除來源。
若要移除您建立的事件來源
在程式碼編輯器中,找出 RemoveSource_Click 程序。
加入以下程式碼:
If EventLog.SourceExists("Source1") Then EventLog.DeleteEventSource("Source1") End If
if (System.Diagnostics.EventLog.SourceExists("Source1")) { System.Diagnostics.EventLog.DeleteEventSource("Source1"); }
讀取項目
在以下程序中,您將會撰寫程式碼來逐一查看事件記錄檔的項目集合,並顯示記錄檔中的現有訊息。
若要從您建立的自訂記錄檔讀取項目
在程式碼編輯器中,找出 ReadEntry_Click 程序。
加入以下程式碼:
Dim entry As EventLogEntry If EventLog1.Entries.Count > 0 Then For Each entry In EventLog1.Entries System.Windows.Forms.MessageBox.Show(entry.Message) Next Else MessageBox.Show("There are no entries in the log.") End If
if (eventLog1.Entries.Count > 0) { foreach (System.Diagnostics.EventLogEntry entry in eventLog1.Entries) { MessageBox.Show(entry.Message); } } else { MessageBox.Show("There are no entries in the log."); }
測試您的程式碼
在以下章節中,您將使用伺服器總管來驗證程式碼的結果。
若要啟動伺服器總管
從 [檢視] 功能表存取 [伺服器總管]。
展開您目前伺服器的節點,然後展開下面的 [事件記錄檔] 節點。
若要建置並執行您的應用程式
儲存檔案並按 F5 以建置並啟動您的專案。接著會出現表單以及您建立的八個按鈕。
按一下 [建立自訂記錄檔] 按鈕。
注意事項: 您必須對應用程式執行位置所在的伺服器具有適當權限,才能建立 Windows 事件記錄檔。如果此時收到安全性錯誤,請與您的系統管理員連絡。
回到仍在執行模式中的產品,接著以滑鼠右鍵按一下 [伺服器總管] 的 [事件記錄檔] 節點。
按一下 [重新整理]。
確認 NewLog1 記錄檔是否出現在 [事件記錄檔] 節點中。
若要測試、刪除和驗證自訂記錄檔
回到正在執行的表單,按一下 [驗證記錄檔是否存在] 按鈕。
接著應出現文字設定為「True」的提示。
按一下 [刪除記錄檔] 按鈕,接著再按一下 [驗證記錄檔是否存在] 按鈕。
這時提示應出現「False」。
再按一下 [建立自訂記錄檔] 按鈕,重新建立記錄檔。
若要測試將項目寫入自訂記錄檔以及從其讀取項目
在表單中,按一下 [寫入項目] 按鈕。
存取 [伺服器總管],接著展開 NewLog1 記錄檔。
展開其下的 [Source1] 節點。
您這時應該看到已有兩個項目加入至記錄檔。一個將有圖示指示這是資訊項目,而另一個則有圖示指示這是錯誤。
回到表單,然後按一下 [讀取項目] 按鈕。
您將收到兩個提示:一個包含資訊項目,另一個則包含錯誤項目。
注意事項: 如果您多次按下 [寫入項目] 按鈕,則會收到更多提示。
若要測試清除記錄檔
在表單中,按一下 [清除記錄檔] 按鈕。
在 [伺服器總管] 中,以滑鼠右鍵按一下 [NewLog1] 節點,接著按一下 [重新整理]。
您這時應看到記錄檔不再包含任何項目。
若要測試移除來源字串
在表單中,按一下 [移除事件來源] 按鈕。
按一下 [驗證來源存在] 按鈕。您應收到顯示 "False" 的訊息,指出來源 Source1 已不存在。
按一下 [寫入項目] 按鈕。
注意事項: 這個動作可讓您將項目寫入記錄檔,這是因為如果來源目前不存在,WriteEntry 方法會設定來源。
在 [伺服器總管] 中,以滑鼠右鍵按一下 [NewLog1] 節點,接著按一下 [重新整理]。您會看到記錄檔中有兩個項目。
再按一下 [驗證來源存在] 按鈕。您會收到顯示 "True" 的訊息,指出來源 Source1 存在。
進行測試時,您也可以選擇性地按一下 [刪除記錄檔] 按鈕。這麼做將移除記錄檔 NewLog1 和原始檔 Source1,系統組態才不會有永久變更。