演练:浏览事件日志、事件源和项
更新:2007 年 11 月
此演练将带您学习 Visual Studio 应用程序中事件日志记录的主要功能区。通过此演练,您将学会如何执行以下任务:
创建 EventLog 组件。
编写代码以创建和删除自定义事件日志。
将各种类型的项写入自定义日志中。
从自定义日志中读取项。
验证日志和事件源是否存在。
清除日志项。
使用“服务器资源管理器”验证事件日志操作的结果。
说明: |
---|
对于在以下说明中使用的某些 Visual Studio 用户界面元素,您的计算机可能会显示不同的名称或位置。这些元素取决于您使用的 Visual Studio 版本及设置。有关更多信息,请参见Visual Studio 设置。 |
创建用户界面
在此演练中,将创建一个 Windows 应用程序,并对其使用一系列控件来启动一系列事件日志记录操作。
为应用程序创建窗体和控件
在“新建项目”对话框中,创建一个 Visual Basic 或 Visual C# 的“Windows 应用程序”,并将其命名为 EventLogApp1。
向该窗体添加八个按钮,并为它们设置下列属性:
控件
Text 属性
Name 属性
Button1
创建自定义日志
CreateLog
Button2
删除日志
DeleteLog
Button3
写入项
WriteEntry
Button4
清除日志
ClearLog
Button5
验证日志是否存在
VerifyLog
Button6
验证源是否存在
VerifySource
Button7
移除事件源
RemoveSource
Button8
读入项
ReadEntry
依次为每个按钮执行下列操作:
在设计器中,双击该按钮以创建该按钮的默认事件处理程序。这将出现代码编辑器,而且出现按钮的 Click 事件的存根 (stub)。
返回到“设计”视图,然后双击下一个按钮。
继续操作,直到为每个按钮创建了默认事件处理程序存根 (stub)。
从“工具箱”的“组件”选项卡,将 EventLog 组件拖到窗体中。
窗体底部的组件栏区域出现 EventLog 组件实例。
创建和删除自定义日志
在此过程中,将使用 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";
安全说明: 创建事件日志时,如果资源已经存在,则必须决定应进行的操作。另一进程(可能是恶意进程)可能已创建了事件日志,并拥有对该事件日志的访问权。将数据放入事件日志后,其他进程就可使用这些数据了。
删除自定义日志
在代码编辑器中,找到 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 存在。
作为可选操作,您可能还希望在测试时单击“DeleteLog”按钮。这将移除日志 NewLog1 和源 Source1,以便不对系统配置做永久更改。