在C#开发中,操作Windows事件日志是常见的需求,无论是记录程序运行状态还是排查系统问题,都可以通过Windows自带的Event Log组件实现,.NET框架提供了System.Diagnostics命名空间下的EventLog类来支持相关操作。

C#操作Windows事件日志的核心类
C#中操作Windows事件日志主要使用System.Diagnostics.EventLog类,该类提供了创建事件源、写入日志、读取日志、删除事件源等一系列方法,使用前需要先引入System.Diagnostics命名空间。
引入命名空间
using System.Diagnostics;
写入Windows事件日志的方法
写入事件日志前需要先确保事件源存在,如果不存在则需要先创建事件源,事件源是标识日志来源的字符串,通常可以使用程序名称作为事件源。
创建事件源
创建事件源需要管理员权限,因为操作的是系统级别的日志组件,以下代码演示如何检查并创建事件源:
string sourceName = "MyAppEventSource";
string logName = "Application"; // 系统默认的应用日志,也可以自定义日志名称
// 检查事件源是否存在
if (!EventLog.SourceExists(sourceName))
{
// 创建事件源,关联到指定的日志
EventLog.CreateEventSource(sourceName, logName);
}
写入不同类型的事件日志
事件日志分为信息、警告、错误三种类型,分别对应EventLogEntryType.Information、EventLogEntryType.Warning、EventLogEntryType.Error,写入日志的代码如下:
string sourceName = "MyAppEventSource"; // 写入信息类型日志 EventLog.WriteEntry(sourceName, "程序启动成功", EventLogEntryType.Information); // 写入警告类型日志 EventLog.WriteEntry(sourceName, "内存使用率超过80%", EventLogEntryType.Warning); // 写入错误类型日志,可附带事件ID EventLog.WriteEntry(sourceName, "数据库连接失败", EventLogEntryType.Error, 1001);
读取Windows事件日志的方法
读取事件日志需要指定要读取的日志名称,然后遍历日志条目获取需要的信息,以下代码演示读取Application日志中指定事件源的日志内容:
string logName = "Application";
string targetSource = "MyAppEventSource";
// 创建EventLog实例,指定要读取的日志
EventLog eventLog = new EventLog(logName);
// 遍历日志条目,从最新的开始读取
for (int i = eventLog.Entries.Count - 1; i >= 0; i--)
{
EventLogEntry entry = eventLog.Entries[i];
// 筛选指定事件源的日志
if (entry.Source == targetSource)
{
Console.WriteLine($"时间:{entry.TimeGenerated}");
Console.WriteLine($"类型:{entry.EntryType}");
Console.WriteLine($"内容:{entry.Message}");
Console.WriteLine($"事件ID:{entry.InstanceId}");
Console.WriteLine("------------------------");
}
}
删除事件源和日志
如果不再需要自定义的事件源或者日志,可以进行删除操作,删除事件源前需要确保没有程序正在使用该事件源:
string sourceName = "MyAppEventSource";
string logName = "Application";
// 删除事件源
if (EventLog.SourceExists(sourceName))
{
EventLog.DeleteEventSource(sourceName);
}
// 如果需要删除整个自定义日志,可以使用Delete方法
// EventLog.Delete(logName);
注意事项
- 创建事件源和写入日志到系统默认日志(Application、System、Security)需要管理员权限,否则会抛出权限异常。
- Security日志默认只有系统服务可以写入,普通程序无法操作Security日志。
- 事件源名称在系统中是唯一的,创建前需要先检查是否存在,避免重复创建报错。
- 读取大量日志时建议添加筛选条件,避免遍历所有条目导致性能问题。
C#Windows_Event_Log事件日志读写EventLog类修改时间:2026-07-15 01:09:26