当前位置:  开发笔记 > 编程语言 > 正文

使用.net检查事件日志中是否记录了事件的最简单方法是什么?

如何解决《使用.net检查事件日志中是否记录了事件的最简单方法是什么?》经验,为你挑选了1个好方法。

在一段时间内检查事件日志中是否记录了事件的最简单方法是什么?

我想执行一系列自动化测试步骤,然后检查是否有任何错误记录到应用程序事件日志中,忽略了一些我不感兴趣的源.我可以使用System.Diagnostics.EventLog然后查看条目集合,但它似乎不适用于这种情况.例如,如果事件日志正在删除旧条目,则Entries.Count会随着时间的推移变小.我更喜欢某种方式来查询日志或监视它在一段时间内的变化.例如

DateTime start = DateTime.Now;
// do some stuff...
foreach(EventLogEntry entry in CleverSolution.EventLogEntriesSince(start, "Application"))
{ 
  // Now I can do stuff with entry, or ignore if its Source is one
  // that I don't care about.
  // ...
}

Tim Farley.. 5

只是为了成为一名优秀的维基公民并努力完成,还有其他方法.我之前没有提出建议,因为它只是作为测试套件的一部分在内部运行的东西完全矫枉过正,你在标题中说你想要的东西很简单.

但是,如果您需要查看运输代码中发生的事件,请继续阅读.信不信由你,此时有三种不同的Windows API.

NotifyChangeEventLog()

这种事物的原始API称为NotifyChangeEventLog(),它在Windows 2000中得到支持.实际上,您使用WIN32事件日志API打开事件日志,然后使用另一个给出的句柄调用此API. API和事件句柄.当有新的事件日志条目要查看时,Windows将发出事件信号.

我从来没有使用这个API自己,因为我的大部分兴趣是在远程事件日志访问这个API明确并不能支持远程日志.然而,设置API中,这家属于让你按顺序读取远程日志,如果你有正确的权限.

Windows Management Instrumentation

第二种方法是使用Windows Management Instrumentation API,这确实支持本地和远程日志.这是一个基于COM/DCOM的API,已在Windows中存在多年,.NET Framework在System.Management命名空间中有很好的实现.基本上你要做的是创建一个EventQuery,它查找Win32_NTLogEvent类型(在WMI类型系统中)的新WMI对象的外观.这些内容将显示新的事件日志条目,它们将实时呈现.这些对象上的属性包含日志条目的所有详细信息.有一篇来自MSDN杂志的文章 谈论在Visual Studio中玩这些东西.

同样,对于测试应用程序来说,这将是完全过度的,它将需要比现有解决方案更多的代码.但是几年前我为网络管理应用程序编写了一个子系统,该子系统使用此API的DCOM风格从网络上的所有服务器收集事件日志,以便我们可以对特定的服务器发出警报.它非常光滑,接近实时.如果您使用DCOM在C++中实现此功能,请准备好处理Multithreaded Apartments和许多毛茸茸的逻辑,以检测您与远程服务器的连接是否/何时上升或下降.

Windows Vista事件日志

Windows Vista(和Server 2008)有一个与事件记录和跟踪相关的全新API套件.在新的事件日志记录在这里.看起来有一个名为EvtSubscribe的API允许您订阅事件.我没有使用过这个API,所以我不能评论它的优缺点.



1> Tim Farley..:

只是为了成为一名优秀的维基公民并努力完成,还有其他方法.我之前没有提出建议,因为它只是作为测试套件的一部分在内部运行的东西完全矫枉过正,你在标题中说你想要的东西很简单.

但是,如果您需要查看运输代码中发生的事件,请继续阅读.信不信由你,此时有三种不同的Windows API.

NotifyChangeEventLog()

这种事物的原始API称为NotifyChangeEventLog(),它在Windows 2000中得到支持.实际上,您使用WIN32事件日志API打开事件日志,然后使用另一个给出的句柄调用此API. API和事件句柄.当有新的事件日志条目要查看时,Windows将发出事件信号.

我从来没有使用这个API自己,因为我的大部分兴趣是在远程事件日志访问这个API明确并不能支持远程日志.然而,设置API中,这家属于让你按顺序读取远程日志,如果你有正确的权限.

Windows Management Instrumentation

第二种方法是使用Windows Management Instrumentation API,这确实支持本地和远程日志.这是一个基于COM/DCOM的API,已在Windows中存在多年,.NET Framework在System.Management命名空间中有很好的实现.基本上你要做的是创建一个EventQuery,它查找Win32_NTLogEvent类型(在WMI类型系统中)的新WMI对象的外观.这些内容将显示新的事件日志条目,它们将实时呈现.这些对象上的属性包含日志条目的所有详细信息.有一篇来自MSDN杂志的文章 谈论在Visual Studio中玩这些东西.

同样,对于测试应用程序来说,这将是完全过度的,它将需要比现有解决方案更多的代码.但是几年前我为网络管理应用程序编写了一个子系统,该子系统使用此API的DCOM风格从网络上的所有服务器收集事件日志,以便我们可以对特定的服务器发出警报.它非常光滑,接近实时.如果您使用DCOM在C++中实现此功能,请准备好处理Multithreaded Apartments和许多毛茸茸的逻辑,以检测您与远程服务器的连接是否/何时上升或下降.

Windows Vista事件日志

Windows Vista(和Server 2008)有一个与事件记录和跟踪相关的全新API套件.在新的事件日志记录在这里.看起来有一个名为EvtSubscribe的API允许您订阅事件.我没有使用过这个API,所以我不能评论它的优缺点.

推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有