实例说明
本实例使用EventLog组件创建一个日志并向日志中写入内容和读取日志中的内容。运行程序,单击“写日志”按钮,把文本框中的内容写到日志当中,单击“读日志”按钮,把日志内容从日志中读出来显示在ListBox控件中。实例运行结果如图所示。
技术要点
实现本实例功能主要用到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("日志中没有记录."); //给出没有记录的提示信息
}
}