zoukankan      html  css  js  c++  java
  • 使用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事件日志时要注意,如果事件日志文件已满,可以在事件属性对话框(在事件右键菜单中选择“属性”菜单项会弹出该对话框)中增加日志文件的大小,或清空当前事件中的日志。事件属性对话框如下图所示。

  • 相关阅读:
    关于XML文档
    Why sql is called structured query language?1
    UML学习---交互
    C#为什么不采用多继承:
    url中
    array
    hard
    构造函数返回值
    布局容器layout Container
    k8s的概念
  • 原文地址:https://www.cnblogs.com/zcm123/p/2579140.html
Copyright © 2011-2022 走看看