我正在开发一个类似于事件查看器的Web应用程序,用于展示事件日志数据。该应用程序还需要提供一种方式让用户订阅事件日志,当被订阅的日志有新条目时,利用Web服务接收通知。
我使用以下代码在Web服务中订阅事件日志:
EventLog eventLog = new EventLog(observer.logName, observer.machineName);
eventLog.EnableRaisingEvents = true;
eventLog.EntryWritten += new EntryWrittenEventHandler(eventLog_EntryWritten);
eventList.Add(eventLog);
我试图将观察者作为事件日志的订阅者,并在处理EventWritten事件时调用一个观察者的Update方法。问题是,我不知道如何区分事件日志,因为它们都使用相同的事件处理程序。我这样做是因为每台计算机上的事件日志数量不同。此外,我希望观察者仅处理一种类型的EventLog,即一个观察者在将事件写入应用程序日志时发送电子邮件。
我使用以下代码行在当前计算机上获取所有日志:
remoteEventLogs = EventLog.GetEventLogs(machineName);
EventWritten事件处理程序有一个名为sender的对象参数,但是Visual Studio显示其类型为EventLogInternal,我无法使用它,也无法将sender强制转换为EventLog以获取EventLog.Log属性。如果我尝试像这样进行强制转换:
void eventLog_EntryWritten(object sender, EntryWrittenEventArgs e)
{
var log = (EventLog)sender;
}
我收到一个异常,说我无法将EventLogInternal强制转换为EventLog。
有没有办法知道是哪个EventLog触发了事件?
谢谢
base.Log
会返回日志的名称。或者你可以将它存储在构造函数的成员变量中,并从事件处理程序(也是成员函数)中访问它。 - Christian.K