在软件开发过程中,经常需要将各类运行信息(例如异常详情或常规业务处理痕迹)保存至日志中,以便后续排查问题或审计追踪。c# 3.0 引入了 eventlog 类,它封装了对 windows 事件日志系统的访问能力,使开发者能够便捷地将消息写入系统级日志。本文将围绕该类展开说明,介绍其核心用法、典型应用场景及关键注意事项,并辅以清晰的代码片段与界面截图,助力开发者高效实现日志功能,增强应用程序的可观测性与维护便利性。
1、 EventLog 类定义于 System.Diagnostics 命名空间内。借助 Windows 自带的“事件查看器”管理工具,即可浏览由程序写入的事件日志条目,实际显示效果如下图所示。

2、 该类提供了多个常用成员方法,涵盖日志创建、写入、查询与清理等操作,详细接口列表参见下图:

3、 下面是一个基础示例,演示如何使用 EventLog 类向“应用程序”日志中写入记录。日志级别通过 EventLogEntryType 枚举值设定,支持信息(Information)、警告(Warning)、错误(Error)等多种类型,具体调用方式如下:
4、 try
5、 {
6、 设置日志来源名称为“我的应用程序”
7、 写入一条信息类日志,内容为“处理信息1”
8、 再次写入一条信息级别日志,内容为“处理信息2”
9、 主动抛出 FileNotFoundException,模拟因找不到 readme.txt 文件而导致的操作失败
10、 }
11、 catch (FileNotFoundException ex)
12、 {
13、 记录一条错误等级日志:“处理信息2”,并附带异常上下文
14、 }
15、 运行上述逻辑后,在事件查看器中可见对应新增的日志项,如图所示:

16、 双击某条日志条目,可打开详细属性窗口,其中会展示 WriteEntry 方法第一个参数所传递的完整描述文本,界面效果如下图:

17、 默认情况下,EventLog 实例会将日志输出到“应用程序”事件日志中。若需定向写入其他日志(如“系统”日志),则必须先调用 CreateEventSource 方法注册合法的事件源,并将其绑定至目标日志类型;否则将触发安全异常。以下示例展示了向“系统”日志写入日志的标准流程:首先完成事件源注册,再初始化 EventLog 对象并执行写入动作。
18、 使用前应确保事件源尚未被其他日志类别占用,每个事件源只能唯一关联一个日志容器。
19、 try
20、 {
21、 将“处理信息1”作为信息类日志写入事件系统
22、 再次写入“处理信息2”,同样设为信息级别
23、 因系统无法定位 readme.txt 文件而引发 FileNotFoundException,提示用户核查路径有效性及文件是否存在
24、 }
25、 catch (FileNotFoundException ex)
26、 {
27、 }
28、 执行完成后,“系统”日志中将出现新条目,效果如下图所示:

29、 开发者还可利用 EventLog 类创建自定义事件日志,例如新建名为“MyEvent”的独立日志分支,其实现代码如下:
30、 在启用前需验证事件源是否已存在,且同一事件源不可重复绑定至多个日志类型。
31、 try
32、 {
33、 写入信息级日志:“处理信息1”
34、 添加另一条信息类日志:“处理信息2”
35、 当尝试读取 readme.txt 文件失败时,抛出 FileNotFoundException,提示该文件缺失或路径配置有误,请确认其位置和命名准确性
36、 }
37、 catch (FileNotFoundException ex)
38、 {
39、 }
40、 成功注册后,事件查看器左侧导航栏将新增“MyEvent”节点,如下图所示:

41、 如图所示,事件查看器左侧已添加“MyEvent”日志分类。此外,EventLog 类也支持遍历指定日志中的全部条目,相关实现代码如下所示:
42、 {
43、 {
44、 }
45、 }
46、 上述代码用于枚举 MyEvent 日志中所有已存记录,并输出每条日志的 Message 字段(即 WriteEntry 方法传入的第一个字符串参数)。除此之外,EventLog 还提供 Delete 方法用于清空某条日志,以及 DeleteEventSource 方法用于彻底卸载某一事件源。需要注意的是:即使事件源已被删除,历史日志数据仍保留在磁盘上,不会随之清除。以下是两个删除操作的典型调用范例,帮助开发者掌握资源回收技巧。在执行删除动作时务必审慎评估影响,防止误删重要追踪线索。
47、 删除已注册的事件源
48、 清空指定日志中的全部条目
49、 清空指定日志中的全部条目
50、 向 Windows 事件日志写入内容时,若遇到日志文件已达上限容量,可通过右键点击对应日志项 → 选择“属性”打开配置面板进行调整。在此界面中,既可扩大最大日志尺寸,也可直接清除现有内容以腾出空间。该设置窗口集成了多项实用选项,便于日常运维与存储优化。











