用 C# 写 Windows 事件日志

作者:vkvi 来源:ITPOW(原创) 日期:2010-4-30

引用:

System.Diagnostics

代码一、最简单的代码

EventLog.WriteEntry("来源", "消息内容", EventLogEntryType.Information);
EventLog.WriteEntry("来源", "消息内容", EventLogEntryType.Information, eventId);

来源可以为任何随机字符串,但其名称必须不同于计算机上的其他来源名称。

代码二、或者也可以实例化类来实现,功能要强大些

EventLog eventLog = new EventLog();
eventLog.Log = "Windows PowerShell";
eventLog.Source = "来源";
eventLog.WriteEntry("消息内容", EventLogEntryType.Information);

除了来源外,我们还指定了一个 Log 属性值(也可以在构造函数中 logName 参数上指定),用它来确定将事件日志写在哪个日志文件(又称日志名称)中(默认是 Application,即应用程序)。

事件日志文件

更安全一些

前面的代码都没有创建来源,而是直接使用来源,这种情况下:如果来源不存在,则自动创建在 Application 日志文件中再使用;若存在,当然就是直接使用了。

好,目前不存在什么问题,再看下面一个:

如果事件日志的来源位于日志文件 A 中,我们现在写日志时,又用同样的来源名称往日志文件 B 中写事件日志,就会出错。

这就有这么一个问题:如果我们期望事件日志不写在默认的 Application 中,而写在我们指定的另外一个日志文件中,那么就必须手动创建来源,或者像代码二那样指定 Log 属性值;如果来源已经在另外一个日志文件中存在了,我们再去创建到另外一个日志文件中,势必就出错。所以要指定日志文件时判断来源是否存在还是有一定必要的:

if (!EventLog.SourceExists("来源"))
{
    EventLog.CreateEventSource("来源", "日志名称");
}
EventLog.WriteEntry("来源", "消息内容", EventLogEntryType.Information);

如果我们指定来源时,日志文件不存在,则会自动创建(需要重新打开“计算机管理”,才能在事件查看器中看到)。若要删除可用 EventLog.Delete。

相关文章