演练:浏览事件日志、事件源和项

更新:2007 年 11 月

此演练将带您学习 Visual Studio 应用程序中事件日志记录的主要功能区。通过此演练,您将学会如何执行以下任务:

  • 创建 EventLog 组件。

  • 编写代码以创建和删除自定义事件日志。

  • 将各种类型的项写入自定义日志中。

  • 从自定义日志中读取项。

  • 验证日志和事件源是否存在。

  • 清除日志项。

  • 使用“服务器资源管理器”验证事件日志操作的结果。

说明:

对于在以下说明中使用的某些 Visual Studio 用户界面元素,您的计算机可能会显示不同的名称或位置。这些元素取决于您使用的 Visual Studio 版本及设置。有关更多信息,请参见Visual Studio 设置

创建用户界面

在此演练中,将创建一个 Windows 应用程序,并对其使用一系列控件来启动一系列事件日志记录操作。

为应用程序创建窗体和控件

  1. 在“新建项目”对话框中,创建一个 Visual Basic 或 Visual C# 的“Windows 应用程序”,并将其命名为 EventLogApp1。

  2. 向该窗体添加八个按钮,并为它们设置下列属性:

    控件

    Text 属性

    Name 属性

    Button1

    创建自定义日志

    CreateLog

    Button2

    删除日志

    DeleteLog

    Button3

    写入项

    WriteEntry

    Button4

    清除日志

    ClearLog

    Button5

    验证日志是否存在

    VerifyLog

    Button6

    验证源是否存在

    VerifySource

    Button7

    移除事件源

    RemoveSource

    Button8

    读入项

    ReadEntry

  3. 依次为每个按钮执行下列操作:

    1. 在设计器中,双击该按钮以创建该按钮的默认事件处理程序。这将出现代码编辑器,而且出现按钮的 Click 事件的存根 (stub)。

    2. 返回到“设计”视图,然后双击下一个按钮。

    3. 继续操作,直到为每个按钮创建了默认事件处理程序存根 (stub)。

  4. 从“工具箱”的“组件”选项卡,将 EventLog 组件拖到窗体中。

    窗体底部的组件栏区域出现 EventLog 组件实例。

创建和删除自定义日志

在此过程中,将使用 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";
    
    安全说明:

    创建事件日志时,如果资源已经存在,则必须决定应进行的操作。另一进程(可能是恶意进程)可能已创建了事件日志,并拥有对该事件日志的访问权。将数据放入事件日志后,其他进程就可使用这些数据了。

删除自定义日志

  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. 作为可选操作,您可能还希望在测试时单击“DeleteLog”按钮。这将移除日志 NewLog1 和源 Source1,以便不对系统配置做永久更改。

请参见

其他资源

系统监视演练

记录应用程序、服务器和安全性事件