.net程序操作系统日志

.net程序操作系统日志

使用微软封装好的EventLog
除了访问个别的事件日志及其项外,EventLog 类还提供了对所有事件日志的集合的访问。您可以使用 EventLog 的 static 成员删除日志、获取日志列表、创建或删除源,或者确定计算机是否已经包含特定的源。
有三种默认事件日志:Application、System 和 Security。已安装的其他应用程序和服务(如 Active Directory)可以有附加的事件日志。可使用 EventLog 创建可通过服务器的事件查看器查看的自定义事件日志。使用 RegisterDisplayName 方法在事件查看器中显示您的事件日志的本地化名称。使用 ModifyOverflowPolicy 方法配置当您的事件日志达到其最大日志大小时的行为。

事件日志占用磁盘空间、处理器时间和其他系统资源。仅记录基本信息很重要。建议将事件日志调用放在错误路径中,而不是放在主代码路径中,以免对性能造成不利影响。
有关 EventLog 的实例的初始属性值列表,请参见 EventLog 构造函数。
详细见:
http://msdn.microsoft.com/zh-cn/library/system.diagnostics.eventlog(VS.80).aspx
里面说的很清楚
微软封装日志的类为EventLogEntry
http://msdn.microsoft.com/zh-cn/library/system.diagnostics.eventlogentry_members(VS.80).aspx
里面包含了:

 

名称说明Category获取与该项的 CategoryNumber 属性关联的文本。CategoryNumber获取事件日志项的类别号。Container获取 IContainer,它包含 Component。(从 Component 继承。)Data获取与该项关联的二进制数据。EntryType获取该项的事件类型。EventID获取当前事件项的应用程序特定事件标识符。Index获取该项在事件日志中的索引。InstanceId获取指定事件项的消息文本的资源标识符。MachineName获取在其上生成该项的计算机的名称。Message获取与该事件项关联的本地化消息。ReplacementStrings获取与该项关联的替换字符串。Site获取或设置 Component 的 ISite。(从 Component 继承。)Source获取生成该事件的应用程序的名称。TimeGenerated获取生成该事件的本地时间。TimeWritten获取在日志中写入该事件的本地时间。UserName获取负责该事件的用户的名称。

 

因此读取就简单了:
比如,我要读取日志中名为myNewLog的项
EventLog myLog = new EventLog("myNewLog");

// 每条日志是个EventLogEntry 对象.
foreach(EventLogEntry entry in myLog.Entries){
Console.WriteLine("\tEntry: " + entry.Message);
}

示例,写日志
public static void Main(){

// Create the source, if it does not already exist.
if(!EventLog.SourceExists("MySource")){
EventLog.CreateEventSource("MySource", "MyNewLog");
Console.WriteLine("CreatingEventSource");
}

// Create an EventLog instance and assign its source.
EventLog myLog = new EventLog();
myLog.Source = "MySource";

// Write an informational entry to the event log. 
myLog.WriteEntry("Writing to event log.");

}

 

问:如果是实时监控的话,用什么方法呢?
回答:你写个线程专门去读取log信息,判断有没有新的log,有的话就执行你的操作
给段示例代码做参考:

using System;
using System.Threading;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
namespace ConsoleApplication3
{
class Program
{
private static List<DateTime> AlreadyHaveLogs = new List<DateTime>();
static void Main(string[] args)
{
Thread thread = new Thread(ShowLog);
thread.Start();
}
static void ShowLog()
{
EventLog ev = new EventLog();
ev.Log = "Application";
EventLogEntryCollection elec = ev.Entries;
foreach (EventLogEntry test in elec)
{
var time = test.TimeGenerated;
if (!AlreadyHaveLogs.Contains(time))
{
AlreadyHaveLogs.Add(time);
//是警告或错误
if (test.EntryType == EventLogEntryType.Warning || test.EntryType == EventLogEntryType.Error)
{
//todo 显示log
}
}
}
//暂停5秒
Thread.Sleep(5000);
//5秒后继续
ShowLog();
}
}
}

参考出处:http://wenwen.soso.com/z/q176611263.htm?sp=2001

posted @ 2012-10-30 08:45  BellingWP  阅读(424)  评论(0编辑  收藏  举报