Share via


逐步解說:探索事件記錄檔、事件來源和項目

更新:2007 年 11 月

這份逐步解說將帶領您逐一檢視 Visual Studio 應用程式中事件記錄的主要功能領域。在此逐步解說期間,您將了解如何進行下列作業:

  • 建立 EventLog 元件。

  • 寫入程式碼來建立和刪除自訂事件記錄檔。

  • 將各種類型的項目寫入自訂記錄檔。

  • 從自訂記錄檔讀取項目。

  • 驗證記錄檔和事件來源 (Event Source) 是否存在。

  • 清除記錄項目。

  • 使用 [伺服器總管] 來驗證事件記錄檔動作的結果。

注意事項:

您的電腦可能會在下列說明中,以不同名稱或位置顯示某些 Visual Studio 使用者介面項目。您所擁有的 Visual Studio 版本以及使用的設定會決定這些項目。如需詳細資訊,請參閱 Visual Studio 設定

建立使用者介面

在這份逐步解說中,您將建立 Windows 應用程式並使用一系列的控制項,來啟動一連串的事件記錄動作。

若要為您的應用程式建立表單和控制項

  1. 從 [新增專案] 對話方塊中,建立 Visual Basic 或 Visual C# [Windows 應用程式],並將它命名為 EventLogApp1。

  2. 將八個按鈕加入至該表單,並為這些按鈕設定下列屬性 (Property):

    控制項

    Text 屬性

    Name 屬性

    Button1

    建立自訂記錄檔

    CreateLog

    Button2

    刪除記錄檔

    DeleteLog

    Button3

    將項目寫入記錄檔

    WriteEntry

    Button4

    清除記錄檔

    ClearLog

    Button5

    驗證記錄是否存在

    VerifyLog

    Button6

    驗證來源是否存在

    VerifySource

    Button7

    移除事件來源

    RemoveSource

    Button8

    讀取項目

    ReadEntry

  3. 接著,針對每個按鈕採取下列步驟:

    1. 在設計工具中,按兩下按鈕來建立這個按鈕的預設事件處理常式。隨即會出現程式碼編輯器,以及按鈕之 Click 事件的副程式。

    2. 回到 [設計] 檢視,接著在下一個按鈕上按兩下。

    3. 繼續以上的步驟,直到所有按鈕都建立了預設事件處理常式副程式為止。

  4. 從 [工具箱] 的 [元件] 索引標籤中,將 EventLog 元件拖曳至表單。

    EventLog 元件執行個體 (Instance) 隨即會出現在表單下方的元件匣區域中。

建立和刪除自訂記錄檔

在以下程序中,您將使用 SourceExists 方法,來驗證所使用的來源是否存在,接著利用不存在的記錄檔名來呼叫 CreateEventSource。由於這個記錄檔不存在,因此在執行這段程式碼時,系統會為您建立自訂記錄檔。

若要建立自訂記錄檔

  1. 在程式碼編輯器中,找出 CreateLog_Click 程序。

  2. 輸入以下程式碼。事件記錄檔和原始檔是配對建立的,而原始檔在事件記錄檔建立前不可以先存在。在建立事件記錄檔後,會設定 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),可能已經建立事件記錄檔,而且擁有其存取權限。將資料置於事件記錄檔時,其他處理序可以使用該資料。

若要刪除自訂記錄檔

  1. 在程式碼編輯器中,找出 DeleteLog_Click 程序。

  2. 輸入以下程式碼:

    If EventLog.Exists("NewLog1") Then
       EventLog.Delete("NewLog1")
    End If
    
    if (System.Diagnostics.EventLog.Exists("NewLog1"))
    {
       System.Diagnostics.EventLog.Delete("NewLog1");
    }
    

將項目寫入記錄檔

在以下程序中,您將使用之前所建立的 EventLog 元件執行個體,以便將項目寫入記錄檔。為達此目的,您會先設定元件以使用剛才建立的來源字串。然後,您會指定兩個要寫入的項目:一個是資訊事件,另一個則是錯誤事件。

若要將項目寫入記錄檔

  1. 在程式碼編輯器中,找出 WriteEntry_Click 程序。

  2. 輸入以下程式碼。這個程式碼會使用多載的 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 方法,從自訂記錄檔移除現有項目。

若要清除記錄項目

  1. 在程式碼編輯器中,找出 ClearLog_Click 程序。

  2. EventLog 元件執行個體上呼叫 Clear 方法:

    EventLog1.Clear()
    
    eventLog1.Clear();
    

驗證記錄檔和來源

在此程序中,您將建立兩個程序:一個會驗證自訂記錄檔是否存在,另一個則是驗證來源字串是否存在。這些程序將用來在您執行專案時,測試您執行各種動作的結果。

若要驗證自訂記錄檔是否存在

  1. 在程式碼編輯器中,找出 VerifyLog_Click 程序。

  2. 建立訊息方塊來評估指定事件記錄檔是否存在,並依此顯示是或否。使用這段程式碼:

    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());
    

若要驗證來源是否存在

  1. 在程式碼編輯器中,找出 VerifySource_Click 程序。

  2. 建立訊息方塊來評估指定來源是否存在,並依此顯示是或否。使用這段程式碼:

    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 方法以移除來源。

若要移除您建立的事件來源

  1. 在程式碼編輯器中,找出 RemoveSource_Click 程序。

  2. 加入以下程式碼:

    If EventLog.SourceExists("Source1") Then
       EventLog.DeleteEventSource("Source1")
    End If
    
    if (System.Diagnostics.EventLog.SourceExists("Source1"))
    {
       System.Diagnostics.EventLog.DeleteEventSource("Source1");
    }
    

讀取項目

在以下程序中,您將會撰寫程式碼來逐一查看事件記錄檔的項目集合,並顯示記錄檔中的現有訊息。

若要從您建立的自訂記錄檔讀取項目

  1. 在程式碼編輯器中,找出 ReadEntry_Click 程序。

  2. 加入以下程式碼:

    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.");
    }
    

測試您的程式碼

在以下章節中,您將使用伺服器總管來驗證程式碼的結果。

若要啟動伺服器總管

  1. 從 [檢視] 功能表存取 [伺服器總管]。

  2. 展開您目前伺服器的節點,然後展開下面的 [事件記錄檔] 節點。

若要建置並執行您的應用程式

  1. 儲存檔案並按 F5 以建置並啟動您的專案。接著會出現表單以及您建立的八個按鈕。

  2. 按一下 [建立自訂記錄檔] 按鈕。

    注意事項:

    您必須對應用程式執行位置所在的伺服器具有適當權限,才能建立 Windows 事件記錄檔。如果此時收到安全性錯誤,請與您的系統管理員連絡。

  3. 回到仍在執行模式中的產品,接著以滑鼠右鍵按一下 [伺服器總管] 的 [事件記錄檔] 節點。

  4. 按一下 [重新整理]。

  5. 確認 NewLog1 記錄檔是否出現在 [事件記錄檔] 節點中。

若要測試、刪除和驗證自訂記錄檔

  1. 回到正在執行的表單,按一下 [驗證記錄檔是否存在] 按鈕。

    接著應出現文字設定為「True」的提示。

  2. 按一下 [刪除記錄檔] 按鈕,接著再按一下 [驗證記錄檔是否存在] 按鈕。

    這時提示應出現「False」。

  3. 再按一下 [建立自訂記錄檔] 按鈕,重新建立記錄檔。

若要測試將項目寫入自訂記錄檔以及從其讀取項目

  1. 在表單中,按一下 [寫入項目] 按鈕。

  2. 存取 [伺服器總管],接著展開 NewLog1 記錄檔。

  3. 展開其下的 [Source1] 節點。

    您這時應該看到已有兩個項目加入至記錄檔。一個將有圖示指示這是資訊項目,而另一個則有圖示指示這是錯誤。

  4. 回到表單,然後按一下 [讀取項目] 按鈕。

    您將收到兩個提示:一個包含資訊項目,另一個則包含錯誤項目。

    注意事項:

    如果您多次按下 [寫入項目] 按鈕,則會收到更多提示。

若要測試清除記錄檔

  1. 在表單中,按一下 [清除記錄檔] 按鈕。

  2. 在 [伺服器總管] 中,以滑鼠右鍵按一下 [NewLog1] 節點,接著按一下 [重新整理]。

    您這時應看到記錄檔不再包含任何項目。

若要測試移除來源字串

  1. 在表單中,按一下 [移除事件來源] 按鈕。

  2. 按一下 [驗證來源存在] 按鈕。您應收到顯示 "False" 的訊息,指出來源 Source1 已不存在。

  3. 按一下 [寫入項目] 按鈕。

    注意事項:

    這個動作可讓您將項目寫入記錄檔,這是因為如果來源目前不存在,WriteEntry 方法會設定來源。

  4. 在 [伺服器總管] 中,以滑鼠右鍵按一下 [NewLog1] 節點,接著按一下 [重新整理]。您會看到記錄檔中有兩個項目。

  5. 再按一下 [驗證來源存在] 按鈕。您會收到顯示 "True" 的訊息,指出來源 Source1 存在。

  6. 進行測試時,您也可以選擇性地按一下 [刪除記錄檔] 按鈕。這麼做將移除記錄檔 NewLog1 和原始檔 Source1,系統組態才不會有永久變更。

請參閱

其他資源

系統監視逐步解說

記錄應用程式、伺服器和安全性事件