开发者社区> cnbird> 正文

C#中使用EventLog类写Windows事件日志

简介: 在程序中经常需要将指定的信息(包括异常信息和正常处理信息)写到日志中。从C#3.0开始可以使用EventLog类(在System.Diagnostics命名空间中)将各种信息写入Windows日志。
+关注继续查看
在程序中经常需要将指定的信息(包括异常信息和正常处理信息)写到日志中。从C#3.0开始可以使用EventLog类(在System.Diagnostics命名空间中)将各种信息写入Windows日志。在 管理工具->事件查看器 中可以查看写入的Windows日志。

  下面是使用EventLog类向应用程序(Application)写入日志的示例,日志类型使用EventLogEntryType枚举类型指定:

EventLog log = new EventLog();
try
{
log.Source = "我的应用程序";
log.WriteEntry("处理信息1", EventLogEntryType.Information);
log.WriteEntry("处理信息2", EventLogEntryType.Information);
throw new System.IO.FileNotFoundException("readme.txt文件未找到");
}
catch (System.IO.FileNotFoundException exception)
{
log.WriteEntry("处理信息2", EventLogEntryType.Error);
}

  运行上面的代码后会将一个错误事件写入日志信息。其中WriteEntry方法的第一个参数指定的信息显示在日志描述中。

  在默认情况下,EventLog类将日志写在Application事件里,通过EventLog的构造方法的参数也可以指定其他的日志,如系统(System)事件,但要注意在向非Application事件写日志信息时,需要先使用CreateEventSource方法将事件源添加到当前事件中。

  下面的例子演示了如何向“系统”事件中添加日志信息:

EventLog log = new EventLog("System");
// 首先应判断日志来源是否存在,一个日志来源只能与一个事件绑定
if(!EventLog.SourceExists("My Application"))
EventLog.CreateEventSource("My Application", "System");
try
{
log.Source = "My Application";
log.WriteEntry("处理信息1", EventLogEntryType.Information);
log.WriteEntry("处理信息2", EventLogEntryType.Information);
throw new System.IO.FileNotFoundException("readme.txt文件未找到");
}
catch (System.IO.FileNotFoundException exception)
{
log.WriteEntry(exception.Message, EventLogEntryType.Error);
}

  执行上面的代码后将向System事件写入的日志。

  我们也可以通过EventLog类的添加自己的事件,代码如下:

EventLog log = new EventLog("MyEvent");
if(!EventLog.SourceExists("New Application"))
EventLog.CreateEventSource("New Application", "MyEvent");
try
{
log.Source = "New Applications";
log.WriteEntry("处理信息1", EventLogEntryType.Information);
log.WriteEntry("处理信息2", EventLogEntryType.Information);
throw new System.IO.FileNotFoundException("readme.txt文件未找到");
}
catch (System.IO.FileNotFoundException exception)
{
log.WriteEntry(exception.Message, EventLogEntryType.Error);
}

  上面的代码添加了一个MyEvent事件,添加后的事件查看器的左侧增加MyEvent事件,该事件与“应用程序”、“系统”等在同一层。
  还可以使用EventLog类来枚举指定事件中的日志,如下面的代码所示:

if (EventLog.Exists("MyEvent"))
{
EventLog log = new EventLog("MyEvent");
foreach (EventLogEntry entry in log.Entries)
{
textBox1.Text += entry.Message + ":";
}
}

  上面的代码枚举了刚才建立的MyEvent事件中的所有日志,并输出了每一个日志的信息(即WriteEntry方法的第一个参数指定的信息)。除此之外还可以使用Delete方法删除指定的事件,使用DeleteEventSource方法删除日志源。
  在写入Windows事件日志时要注意,如果事件日志文件已满,可以在事件属性对话框(在事件右键菜单中选择“属性”菜单项会弹出该对话框)中增加日志文件的大小,或清空当前事件中的日志。
 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
PostgreSQL 10.1 手册_部分 III. 服务器管理_第 30 章 可靠性和预写式日志_30.5. WAL内部
30.5. WAL内部 WAL是自动被启用的。除了做一些设置满足存放WAL日志的磁盘空间需求以及一些必要的调节以外(参阅第 30.4 节),对管理员没有什么其他要求。 当每个新记录被写入时,WAL记录被追加到WAL日志中。
1010 0
PostgreSQL 10.1 手册_部分 III. 服务器管理_第 30 章 可靠性和预写式日志
第 30 章 可靠性和预写式日志 目录 30.1. 可靠性 30.2. 预写式日志(WAL) 30.3. 异步提交 30.4. WAL配置 30.5. WAL内部 本章解释预写式日志如何用于获得有效的、可靠的操作。
949 0
使用异步事件在后台进行计算并报告进度
演练:实现一个使用后台操作的窗体 Visual Studio 2010     其他版本     此主题尚未评级 - 评价此主题     如果某项操作需要很长的时间才能完成,并且不希望用户界面 (UI) 停止响应或“挂起”,则可以使用 BackgroundWorker 类在另一个线程中执行这种操作。
837 0
使用developer kit 初步打通阿里生活物联网平台
最近小编又发现了一块新大陆,阿里智能生活平台,那么什么是阿里智能生活平台呢。阿里的官方解释如下:生活物联网平台,顾名思义就是应用于生活,以解决家电设备快速智能化的问题。平台针对家电智能化的设备连接、移动端控制、设备管理、数据统计等问题,打包阿里云多款产品,提供了一整套配置化方案,大幅减低“设备-云端-App”的开发成本。
1797 0
ACCESS 触发器delete table事件变量使用及连续删除
    ACCESS的TABLE DELETE 事件触发后,会出现一个[旧]的记录,这条记录非常有用,可以用来作条件判断使用。     如下图的table event事件中,删除一条记录后,可以使用[旧]记录连接执行多个删除相关记录的操作。
600 0
仿酷狗音乐播放器开发日志二十五 duilib右键事件的不足的bug修复
转载请说明原出处,谢谢~~        虽然仿酷狗的各个菜单早就写好了,但是一直没有附加到程序里。今天把菜单和播放列表控件关联时发现了问题。        和播放列表相关的菜单有三个,分别是每个音乐项目控件相关的菜单、分组的菜单、音乐电台的菜单。
953 0
HarmonyOS初探06——使用DevEco Studio模拟器端口被占用无法启动
在内网环境下首次使用DevEco Studio创建应用时,可能会报如下问题: server not running; starting it at tcp:5037
21 0
+关注
cnbird
阿里云安全专家,主要负责阿里云云产品安全。
4033
文章
3
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载