如何:向事件日志中写入项
更新:2007 年 11 月
向事件日志写入项时,要将想写入日志的消息指定为字符串。一条消息应包含阐述问题原因以及要采取的纠正操作所需的全部信息。
向日志中写入项主要有两种方式,它们的有效性是一样的。最直接的方式是,将一个事件源注册到您想要写入项的日志,然后实例化一个组件并为此日志设置其 Source 属性,最后调用 WriteEntry。如果完成了此操作,则无需设置该组件实例的 Log 属性;该日志在您连接到已注册的源时自动确定。有关注册源的更多信息,请参见 如何:将应用程序添加为事件日志项的源。
实现此进程的另一种方法就是,实例化 EventLog 组件,设置它的 Source、MachineName 和 Log 属性,并调用 WriteEntry 方法。在这种情况下,WriteEntry 方法将确定源是否已存在,而且如果它尚未存在就随即进行注册。
要成功写入一个日志项,必须满足下列条件:
源必须注册到要用的日志。
说明: 必须针对 EventLog 组件实例设置 Source 属性,才能向日志写入项。在组件写入项时,系统会自动检查您指定的源是否已注册到此组件正写入的事件日志,并且在需要时调用 CreateEventSource。通常在安装应用程序的过程中创建新的事件源。这样,操作系统就有时间刷新自己的已注册事件源的列表及其配置。如果操作系统未刷新其事件源列表,而您试图用新的事件源来编写事件,则写操作将失败。如果不能选择在安装过程中创建事件源,则请尝试在第一次写操作之前尽早创建事件源,比如在应用程序初始化过程中创建。如果选择这种方法,请确保使用计算机上的管理员权限运行初始化代码。这些权限是创建新事件源所必需的权限。
指定的消息长度不能超过 16 K。
您的应用程序对正在尝试写入的日志必须具有写访问权。有关更多信息,请参见 事件日志的安全性细节。
写入项时可以指定几个参数,包括您要生成的项的类型,一个标识事件的 ID,一个类别,和您想追加到此项的任何二进制数据。
写入事件日志项
实例化一个 EventLog 组件。有关更多信息,请参见 如何:创建 EventLog 组件实例。
使用 CreateEventSource 方法将事件源注册到要写入项的日志,并使用特有字符串作为表示源的字符串。将组件的 Source 属性设置为您注册的源。有关更多信息,请参见 如何:配置 EventLog 组件实例。调用 WriteEntry 方法以指定要写入日志的项。
If Not EventLog.SourceExists("MyApp1") Then EventLog.CreateEventSource("MyApp1", "Application") End If EventLog1.Source = "MyApp1" EventLog1.WriteEntry("This is a simple event log entry")
if (!System.Diagnostics.EventLog.SourceExists("MyApp1")) System.Diagnostics.EventLog.CreateEventSource( "MyApp1", "Application"); EventLog1.Source = "MyApp"; EventLog1.WriteEntry("This is a simple event log entry");
写入本地化事件日志项
实例化一个 EventLog 组件。有关更多信息,请参见 如何:创建 EventLog 组件实例。
若要写入本地化事件日志项,请使用 WriteEvent 方法。在这种情况下,使用资源标识符(而非字符串值)指定事件属性。“事件查看器”使用资源标识符显示源的本地化资源文件中的对应字符串。必须用相应的资源文件注册源,然后才能使用资源标识符写事件。有关注册资源文件的信息,请参见 EventSourceCreationData Class。
If Not EventLog.SourceExists("MyApp1") Then EventLog.CreateEventSource("MyApp1", "Application") End If EventLog1.Source = "MyApp1" EventLog1.WriteEvent(New EventInstance(1, 1), New String() {"message"})
if (!System.Diagnostics.EventLog.SourceExists("MyApp1")) System.Diagnostics.EventLog.CreateEventSource( "MyApp1", "Application"); EventLog1.Source = "MyApp"; EventLog1.WriteEvent(new System.Diagnostics.EventInstance(1, 1), new string[] { "message" });