C#3.0杂谈(1):使用EventLog类写Windows事件日志

操作系统: Windows XP SP3

            开发工具: Visual Studio 2008

                 语言: C# 3.0

 .net Framework: 3.5

 

    在程序中经常需要将指定的信息(包括异常信息和正常处理信息)写到日志中。在C#3.0中可以使用EventLog类将各种信息直接写入Windows日志。EventLog类在System.Diagnostics命名空间中。我们可以在“管理工具” > "事件查看器“中可以查看我们写入的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 " );
//   首先应判断日志来源是否存在,一个日志来源只能同时与一个事件绑定s
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 " );
//   首先应判断日志来源是否存在,一个日志来源只能同时与一个事件绑定s
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事件日志时要注意,如果事件日志文件已满,可以在事件属性对话框(在事件右键菜单中选择“属性”菜单项会弹出该对话框)中增加日志文件的大小,或清空当前事件中的日志。事件属性对话框如下图所示。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值