首页 > 电脑专区 > 电脑教程 >

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

来源:互联网 2023-02-21 17:58:27 版权归原作者所有,如有侵权,请联系我们

在程序中经常需要将指定的信息(包括异常信息和正常处理信息)写到日志中。在C#3.0中可以使用EventLog类将各种信息直接写入Windows的日志里。下面简单介绍一下使用C#如何实现使用EventLog类写Windows事件日志,希望能够帮助到大家!SWl办公区 - 实用经验教程分享!

工具/原料

  • Visual Studio 2010

方法/步骤

  • 1

    EventLog类在System.Diagnostics命名空间中。可以在“管理工具” > "事件查看器“中可以查看我们写入的Windows日志,如下图所示:SWl办公区 - 实用经验教程分享!

    C#实现使用EventLog类写Windows事件日志SWl办公区 - 实用经验教程分享!

  • 2

    EventLog类里面的函数有下面几个,如下所示:SWl办公区 - 实用经验教程分享!

    C#实现使用EventLog类写Windows事件日志SWl办公区 - 实用经验教程分享!

  • 3

    下面是一个使用EventLog类向应用程序(Application)写入日志的例子,日志类型使用EventLogEntryType枚举类型指定,如下所示:SWl办公区 - 实用经验教程分享!

    EventLog log = new EventLog();SWl办公区 - 实用经验教程分享!

    trySWl办公区 - 实用经验教程分享!

    {SWl办公区 - 实用经验教程分享!

    log.Source = "我的应用程序";SWl办公区 - 实用经验教程分享!

    log.WriteEntry("处理信息1", EventLogEntryType.Information);SWl办公区 - 实用经验教程分享!

    log.WriteEntry("处理信息2", EventLogEntryType.Information);SWl办公区 - 实用经验教程分享!

    throw new System.IO.FileNotFoundException("readme.txt文件未找到");SWl办公区 - 实用经验教程分享!

    }SWl办公区 - 实用经验教程分享!

    catch (System.IO.FileNotFoundException exception)SWl办公区 - 实用经验教程分享!

    {SWl办公区 - 实用经验教程分享!

    log.WriteEntry("处理信息2", EventLogEntryType.Error);SWl办公区 - 实用经验教程分享!

    }SWl办公区 - 实用经验教程分享!

  • 4

    在运行上面的代码后,将会写入如下图所示的日志信息,如下所示:SWl办公区 - 实用经验教程分享!

    C#实现使用EventLog类写Windows事件日志SWl办公区 - 实用经验教程分享!

  • 5

    其中WriteEntry方法的第一个参数指定的信息通过双击相应的日志可以查看,如下图所示:SWl办公区 - 实用经验教程分享!

    C#实现使用EventLog类写Windows事件日志SWl办公区 - 实用经验教程分享!

  • 5
  • 6

    在默认情况下,EventLog类将日志写在Application事件里,通过EventLog的构造方法的参数也可以指定其他的日志,如系统(System)事件,但要注意在向非Application事件写日志信息时,需要先使用CreateEventSource方法将事件源添加到当前事件中,下面的例子演示了如何向“系统”事件中添加日志信息:SWl办公区 - 实用经验教程分享!

    EventLog log = new EventLog("System");SWl办公区 - 实用经验教程分享!

    // 首先应判断日志来源是否存在,一个日志来源只能同时与一个事件绑定sSWl办公区 - 实用经验教程分享!

    if(!EventLog.SourceExists("My Application"))SWl办公区 - 实用经验教程分享!

    EventLog.CreateEventSource("My Application", "System");SWl办公区 - 实用经验教程分享!

    trySWl办公区 - 实用经验教程分享!

    {SWl办公区 - 实用经验教程分享!

    log.Source = "My Application";SWl办公区 - 实用经验教程分享!

    log.WriteEntry("处理信息1", EventLogEntryType.Information);SWl办公区 - 实用经验教程分享!

    log.WriteEntry("处理信息2", EventLogEntryType.Information);SWl办公区 - 实用经验教程分享!

    throw new System.IO.FileNotFoundException("readme.txt文件未找到");SWl办公区 - 实用经验教程分享!

    }SWl办公区 - 实用经验教程分享!

    catch (System.IO.FileNotFoundException exception)SWl办公区 - 实用经验教程分享!

    {SWl办公区 - 实用经验教程分享!

    log.WriteEntry(exception.Message, EventLogEntryType.Error);SWl办公区 - 实用经验教程分享!

    }SWl办公区 - 实用经验教程分享!

  • 7

    在执行上面的代码后,向System事件写入的日志如下图所示:SWl办公区 - 实用经验教程分享!

    C#实现使用EventLog类写Windows事件日志SWl办公区 - 实用经验教程分享!

  • 8

    也可以通过EventLog类的添加自己的事件,代码如下:SWl办公区 - 实用经验教程分享!

    EventLog log = new EventLog("MyEvent");SWl办公区 - 实用经验教程分享!

    // 首先应判断日志来源是否存在,一个日志来源只能同时与一个事件绑定sSWl办公区 - 实用经验教程分享!

    if(!EventLog.SourceExists("New Application"))SWl办公区 - 实用经验教程分享!

    EventLog.CreateEventSource("New Application", "MyEvent");SWl办公区 - 实用经验教程分享!

    trySWl办公区 - 实用经验教程分享!

    {SWl办公区 - 实用经验教程分享!

    log.Source = "New Applications";SWl办公区 - 实用经验教程分享!

    log.WriteEntry("处理信息1", EventLogEntryType.Information);SWl办公区 - 实用经验教程分享!

    log.WriteEntry("处理信息2", EventLogEntryType.Information);SWl办公区 - 实用经验教程分享!

    throw new System.IO.FileNotFoundException("readme.txt文件未找到");SWl办公区 - 实用经验教程分享!

    }SWl办公区 - 实用经验教程分享!

    catch (System.IO.FileNotFoundException exception)SWl办公区 - 实用经验教程分享!

    {SWl办公区 - 实用经验教程分享!

    log.WriteEntry(exception.Message, EventLogEntryType.Error);SWl办公区 - 实用经验教程分享!

    }SWl办公区 - 实用经验教程分享!

  • 9

    上面的代码添加了一个MyEvent事件,添加后的事件查看器界面如下图所示:SWl办公区 - 实用经验教程分享!

    C#实现使用EventLog类写Windows事件日志SWl办公区 - 实用经验教程分享!

  • 10

    从上图可以看出,左侧的事件查看器中多了个MyEvent事件。还可以使用EventLog类来枚举指定事件中的日志,如下面的代码所示:SWl办公区 - 实用经验教程分享!

    if (EventLog.Exists("MyEvent"))SWl办公区 - 实用经验教程分享!

    {SWl办公区 - 实用经验教程分享!

    EventLog log = new EventLog("MyEvent");SWl办公区 - 实用经验教程分享!

    foreach (EventLogEntry entry in log.Entries)SWl办公区 - 实用经验教程分享!

    {SWl办公区 - 实用经验教程分享!

    textBox1.Text = entry.Message ":";SWl办公区 - 实用经验教程分享!

    }SWl办公区 - 实用经验教程分享!

    }SWl办公区 - 实用经验教程分享!

  • 11

    上面的代码枚举了刚才建立的MyEvent事件中的所有日志,并输出了每一个日志的信息(就是WriteEntry方法的第一个参数指定的信息)。除此之外,还可以使用Delete方法删除指定的事件,使用DeleteEventSource方法删除日志源,要注意的是虽然源删掉了,但是日志记录还是存在没被删掉。下面给出Delete和DeleteEventSource的用法,如下所示:SWl办公区 - 实用经验教程分享!

    EventLog log = new EventLog();SWl办公区 - 实用经验教程分享!

    //删除日志源SWl办公区 - 实用经验教程分享!

    if (EventLog.SourceExists("My Application"))SWl办公区 - 实用经验教程分享!

    EventLog.DeleteEventSource("My Application");SWl办公区 - 实用经验教程分享!

    //删除日志事件SWl办公区 - 实用经验教程分享!

    if (EventLog.Exists("MyEvent"))SWl办公区 - 实用经验教程分享!

    EventLog.Delete ("MyEvent");SWl办公区 - 实用经验教程分享!

    //删除日志事件SWl办公区 - 实用经验教程分享!

    EventLog log = new EventLog("Application");SWl办公区 - 实用经验教程分享!

    log.Clear();SWl办公区 - 实用经验教程分享!

    在写入Windows事件日志时要注意,如果事件日志文件已满,可以在事件属性对话框(在事件右键菜单中选择“属性”菜单项会弹出该对话框)中增加日志文件的大小,或清空当前事件中的日志。事件属性对话框如下图所示:SWl办公区 - 实用经验教程分享!

    C#实现使用EventLog类写Windows事件日志SWl办公区 - 实用经验教程分享!

  • 以上方法由办公区教程网编辑摘抄自百度经验可供大家参考!SWl办公区 - 实用经验教程分享!


    标签: 操作系统实现使用日志

    办公区 Copyright © 2016-2023 www.bgqu.net. Some Rights Reserved. 备案号:湘ICP备2020019561号