Logging Application State

关于事件(event),event在很多地方都用的上。在开发应用程序时,我们需要让系统管理员也可以参与到应用的维护中来,一般来说系统管理员都会使用监控软件来监视系统中产生的所有事件,并根据这些事件来进行必要的系统管理任务。通过Events Viewer可以来查看Windows系统中所支持的事件种类。

系统事件(System):存储所有非安全类的操作系统事件。

安全事件(Security):存储监视事件,主要包括:用户登录、登出,或则一些其他的跟安全有关的特殊事件。

应用事件(Application):存储所有有关应用的事件。

每个事件中都包括一个源,这个源就是指产生该事件的那个应用程序。在记录任何事件之前,必须先进行事件源的注册。在注册事件源时,可以用编辑注册表的方式,不过这显然不是programmatically的,另一种方法是用EventLog.CreatEventSource方法来进行事件源的注册,EventLog类在System.Diagnostics中。

   1:  if (!EventLog.SourceExists("My Application"))
   2:      EventLog.CreateEventSource("My Application", "Application");

这段代码就是注册一个“My Application”的事件源,并且这个事件源注册到Application这个事件种类下面。当然也可以自定义事件记录:

   1:  if (!EventLog.Exists("My Log") )
   2:      EventLog.CreateEventSource("My App", "My Log");

 

由于调用EventLog.CreatEventSource方法需要管理员级别的权限,所有一般来说这个操作都是在应用程序的安装进程中进行的。

在注册完事件源之后,就可以进行事件的记录操作了:

   1:  EventLog myLog = new EventLog("Application");
   2:  myLog.Source = "My Application";
   3:  myLog.WriteEntry("Could not connect", EventLogEntryType.Error, 1001, 1);

用EventLog的对象来添加事件,在构造该对象时,提供一个事件的类别。然后定义使用myLog.Source属性设定这个事件的源,最后用myLog.WriteEntry方法来进行事件写入。这个方法接收5个参数:

message:消息,描述事件用的,要非常详细的。

type:这个是EventLogEntryType枚举,可以是 Information,Warning,Error,FailureAudit,SuccessAudit。

eventID:这个很明显就是事件ID了,管理员可以用这个ID搜索特定的事件。可以为应用设定特别的ID。

category:类似于event ID,这个用来鉴别event的类别。

rawData:是一个byte的数组,用来提供给系统管理员更多关于该事件的信息(可选的)。

读取Events时:

   1:  EventLog myLog = new EventLog("Application");
   2:  foreach (EventLogEntry entry in myLog.Entries)
   3:      Console.WriteLine(entry.Message);

依然使用EventLog,这段代码会把Application下面的所有event都输出到Console上。

posted @ 2009-08-24 16:37  我写的不是代码 是寂寞  阅读(342)  评论(0编辑  收藏  举报