专业编程基础技术教程

网站首页 > 基础教程 正文

使用EventLog组件读写Windows系统事件日志-C#学习进阶

ccvgpt 2024-08-28 13:36:54 基础教程 38 ℃

实例说明

本实例使用EventLog组件创建一个日志并向日志中写入内容和读取日志中的内容。运行程序,单击“写日志”按钮,把文本框中的内容写到日志当中,单击“读日志”按钮,把日志内容从日志中读出来显示在ListBox控件中。实例运行结果如图所示。


使用EventLog组件读写Windows系统事件日志-C#学习进阶

技术要点

实现本实例功能主要用到EventLog组件的Log属性、Entries属性、Source属性、MachineName属性、WriteEntry方法、EventLog类的SourceExists方法、CreateEventSource方法和Exists方法。下面分别进行介绍。

(1)Log属性

此属性获取或设置读取或写入的日志名称。其语法格式如下:

public string Log { get; set; }

属性值:日志的名称。可以是Application、System和Security,或一个自定义的日志名称。默认值为空字符串(“”)。

(2)Entries属性

此属性获取事件日志的内容。其语法格式如下:

public EventLogEntryCollection Entries { get; }

属性值:EventLogEntryCollection保留事件日志中的项。每个项均与EventLogEntry类的一个实例关联。

(3)Source属性

此属性获取或设置在写入事件日志时要注册和使用的源名称。其语法格式如下:

public string Source { get; set; }

属性值:在事件日志中注册为项源的名称。默认值为空字符串(“”)。

(4)MachineName属性

此属性获取或设置在其上读取或写入事件的计算机名称。其语法格式如下:

public string MachineName { get; set; }

属性值:事件日志驻留的服务器名称。默认为本地计算机(“.”)。

(5)WriteEntry方法

此方法将信息类型项与给定的消息文本一起写入事件日志。其语法格式如下:

public void WriteEntry (string message)

参数说明如下。

message:要写入事件日志的字符串。

(6)SourceExists方法

此方法确定事件源是否已在本地计算机上注册。其语法格式如下:

public static bool SourceExists (string source)

参数说明如下。

source:事件源的名称。

返回值:如果事件源已在本地计算机上注册,则为True;否则为False。

(7)CreateEventSource方法

此方法建立一个应用程序,使用指定的Source作为向本地计算机上的日志写入日志项的有效事件源。此方法还可在本地计算机上创建一个新的自定义日志。其语法格式如下:

public static void CreateEventSource (string source,string logName)

参数说明如下。

source:应用程序在本地计算机上注册时采用的源名称。

LogName:事件源的项写入的日志名。可能的值包括应用程序、系统或自定义事件日志。

(8)Exists方法

此方法确定该日志是否存在于本地计算机上。其语法格式如下:

public static bool Exists (string logName)

参数说明如下。

logNam:要搜索的日志名称。可能的值包括:应用程序、安全、系统、其他应用程序特定值以及日志(如与Active Directory关联的日志)或计算机上的任何自定义日志。

返回值:如果该日志存在于本地计算机上,则为True;否则为False。

实现过程

(1)新建一个Windows应用程序,将其命名为ReadWriteEconomyEventLog,默认窗体为Form1。

(2)在Form1窗体中,主要添加一个EventLog组件,用来创建日志;添加两个Button控件,用来执行读写日志操作;添加一个TextBox控件,用来输入日志内容;添加一个ListBox控件,用来显示日志内容。

(3)主要程序代码。

创建日志的实现代码如下:

private void Form1_Load(object sender, EventArgs e)

{

    if (System.Diagnostics.EventLog.SourceExists("ZhyScoure"))          //检查事件源是否存在,如果不存在将注册事件源

    {

        System.Diagnostics.EventLog.DeleteEventSource("ZhyScoure");      //注册事件源

    }

    System.Diagnostics.EventLog.CreateEventSource("ZhyScoure", "NewLog1");         //为NewLog1日志名称注册事件源

    eventLog1.Log = "NewLog1";                                                //NewLog1日志

    eventLog1.Source = "ZhyScoure";                     //事件源名

this.eventLog1.MachineName = ".";             //表示本机

}

向日志中写入内容的实现代码如下:

private void button1_Click(object sender, EventArgs e)

{

    if (System.Diagnostics.EventLog.Exists("NewLog1"))              //检查日志是否存在

    {

        if (textBox1.Text != "")         //当文本框的内容不为空时

        {

            eventLog1.WriteEntry(textBox1.Text.ToString( ));     //向日志中写入内容

            MessageBox.Show("日志写成功");                           //弹出写入成功的消息提示信息

            textBox1.Text = "";               //清空文本框中的内容

        }

        else                                   //当文本框的内容为空时

        {

            MessageBox.Show("日志内容不能为空");         //弹出日志内容为空的提示信息

        }

    }

    else                                          //当日志不存在时

    {

        MessageBox.Show("日志不存在");                                  //弹出日志不存在的提示信息

    }

}

读取日志中内容的实现代码如下:

private void button2_Click(object sender, EventArgs e)

{

    listBox1.Items.Clear( );              //清空listBox1中原有内容

    if (eventLog1.Entries.Count > 0) //当日志中有内容时

    {

        foreach (System.Diagnostics.EventLogEntry entry in eventLog1.Entries)  //循环读出日志内容

        {

            listBox1.Items.Add(entry.Message);            //将读出的日志内容添加至listBox1中

        }

    }

    else                                                          //当日志中没有内容时

    {

        MessageBox.Show("日志中没有记录.");                   //给出没有记录的提示信息

    }

}

Tags:

最近发表
标签列表