如何:创建和移除自定义事件日志

更新:2007 年 11 月

可以使用 EventLog 类在本地或远程计算机上创建自定义事件日志。如果想以比组件向默认 Application 日志写入条目时所允许的方式更精细的方式来组织条目,可创建一个自定义日志。例如,假定您有一个称为 OrderEntry 的组件,它向一个事件日志写入条目信息。较之于 Application 日志中其他一些条目,您希望让这些条目能备份和保存较长一段时间。不是将组件注册为向 Application 日志写入项,而是创建一个名为 OrdersLog 的自定义日志,并将组件注册为向此日志中写入项。这样,您所有的订单信息就存储在一个位置,而且如果 Application 日志中的条目被清除,此信息也不会受到影响。

可以间接使用 CreateEventSource 方法创建自定义日志。此方法可创建新源,并可以让您指定要写入的日志。如果您指定想向一个尚未存在的日志中写入,系统会自动创建一个自定义日志,并将您的组件注册为此日志的一个源。

说明:

移除自定义日志的方法与移除任何日志的方法相同,都是调用 Delete 方法。有关更多信息,请参见 如何:删除事件日志

要注意创建事件日志和创建 EventLog 组件的实例之间的区别,这一点很重要。使用 CreateEventSource 方法时,将在 Windows 中创建一个新的自定义事件日志,而不是在您的项目或应用程序中创建一个组件。创建 EventLog 组件的实例时,将在项目内部创建一个组件,该组件引用一个外部事件日志。可以在“事件查看器”中查看用 CreateEventSource 方法创建的事件日志,但不能在其中查看组件实例。

说明:

通常在安装应用程序的过程中创建新的事件源。这样,操作系统就有时间刷新自己的已注册事件源的列表及其配置。如果操作系统未刷新其事件源列表,而您试图用新的事件源来编写事件,则写操作将失败。如果不能选择在安装过程中创建事件源,则请尝试在第一次写操作之前尽早创建事件源,比如在应用程序初始化过程中创建。如果选择这种方法,请确保使用计算机上的管理员权限运行初始化代码。这些权限是创建新事件源所必需的权限。

可以在“服务器资源管理器”中或在 Windows 2000 的“计算机管理”窗口中查看自定义日志。有关更多信息,请参见 如何:在服务器资源管理器中使用事件日志如何:从服务器资源管理器启动事件查看器

必须在远程计算机上具有适当的访问权限才能创建和删除日志。有关更多信息,请参见 事件日志的安全性细节

安全说明:

在创建事件日志时,请注意资源可能已经存在。另一进程(可能是恶意进程)可能已创建了资源,并拥有对该资源的访问权。将数据放入事件日志后,其他进程就可使用这些数据了。有关现有事件日志的信息,请参见 如何:确定特定事件日志是否存在

创建自定义事件日志

  • 调用 CreateEventSource 方法,并指定源字符串和要创建的日志文件的名称。

    说明:

    如果将日志名称指定为空 (""),则将默认使用 Application 日志。这样不会创建新日志,但会为 Application 日志注册指定的源。如果创建一个新的日志,则在确定名称是否唯一时将只计算前 8 个字母。

    下面的示例演示如何在本地计算机上创建一个名为 MyNewLog 的自定义日志。此代码假设对应 System.Diagnostics 命名空间存在一个 Imports 或 using 语句:

    EventLog.CreateEventSource("ApplicationName", "LogName")
    
         System.Diagnostics.EventLog.CreateEventSource("ApplicationName", "LogName");
    

    若要在远程计算机上创建自定义事件日志,请将此计算机名指定为第三个参数。下面的代码提供了一个示例。

    Dim creationData As New EventSourceCreationData("ApplicationName", "LogName")
    creationData.MachineName = "ServerName"
    EventLog.CreateEventSource(creationData)
    
         System.Diagnostics.EventSourceCreationData creationData = new
                System.Diagnostics.EventSourceCreationData("ApplicationName", "LogName");
            creationData.MachineName = "ServerName";
            EventLog.CreateEventSource(creationData);
    

请参见

任务

如何:删除事件日志

如何:在服务器资源管理器中使用事件日志

如何:从服务器资源管理器启动事件查看器

概念

事件日志的安全性细节

EventLog 组件介绍

参考

EventLog

其他资源

管理事件日志