C#中EventLog的使用

 

 

命名空间System.Diagnostics.EventLog;

 

EventLog(string logName,string machineName,string source);

 

如果source 注册的信息不在logName日志中也不在其他日志中(如图1),则会自动在logName指定的日志中注册;

 

如果source 注册的信息不在logName日志中而在其他日志中(如图1),会报错误。

                                                     

可以将logName自定为空字符串(""),这样会自动匹配source注册的日志,如果匹配不到,则会将日记记录在“应用程序”日志中。

 

 

 

EventLog = new System.Diagnostics.EventLog("logname", "computer2");

EventLog.Source = "分范德萨";

 

 

c#写系统日志

 

using System;

using System.Collections.Generic;

using System.Text;

using System.Diagnostics;

 

namespace Log

{

    class LogWirter

    {

        /// <summary>

        /// 事件源名称

        /// </summary>

        private string eventSourceName;

        EventLogEntryType eventLogType;

        public LogWirter()

        {

            eventSourceName = "test";

            eventLogType = EventLogEntryType.Error;

        }

 

        /// <summary>

        /// 消息事件源名称

        /// </summary>

        public string EventSourceName

        {

            set { eventSourceName = value; }

        }

 

        /// <summary>

        /// 消息事件类型

        /// </summary>

        public EventLogEntryType EventLogType

        {

            set { eventLogType = value; }

        }

 

        /// <summary>

        /// 写入系统日志

        /// </summary>

        /// <param name="message">事件内容</param>

        public void LogEvent(string message)

        {

            if (!EventLog.SourceExists(eventSourceName))

            {

                EventLog.CreateEventSource(eventSourceName, "Application");

            }

            EventLog.WriteEntry(eventSourceName, message, EventLogEntryType.Error);

        }

    }

}

 

 

使用EventLog类写Windows事件日志

 

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