【问题标题】:How do you open the event log programatically?如何以编程方式打开事件日志?
【发布时间】:2010-10-11 04:57:06
【问题描述】:

我正在使用通常的方式将错误记录到事件日志中:

 System.Diagnostics.Trace.TraceError("<" + purpose + "><time>" + DateTime.Now.ToUniversalTime() + "</time><message>" + message + "</message></" + purpose + ">");

我想知道是否有一种方法可以调用此日志文件并将其显示给用户(以我自己的格式或像“事件查看器”一样直接打开事件日志文件)。

我在 %SystemRoot%\System32\Winevt\Logs\mylog.evtx 中找到了该文件,但不确定是否应该以这种方式处理它。理想情况下,我想模拟事件查看器的功能,但为我的应用程序定制。

【问题讨论】:

  • 只是一个问题,Trace.TraceError 不会(自己)写入 EventLog,是吗?
  • @Henk,不,我不这么认为。 alphabeat 大概已经在 Trace.TraceListeners 中添加了一个 EventLogTraceListener。
  • 我确实有。虽然当时我并不知道,但它已经被另一个开发者设置好了。

标签: c# .net winforms event-log


【解决方案1】:

试试System.Diagnostics.EventLog

例如,您可以按如下方式查看应用程序日志中的条目

var log = EventLog.GetEventLogs().Where(x => x == "Application").First();
foreach (var entry in log.Entries) {
  // Do something with the entry
}

【讨论】:

  • 感谢您的示例。我确实爱我一些 lambda。
  • 这个例子很危险!由于日志大小有限,旧事件可能会在遍历条目时被删除,从而导致异常。
  • 不知道会抛出什么异常?使用 foreach 您可以获得集合实例,因此唯一的问题是您可以拥有一些旧数据,因为旧事件会被新事件覆盖。还是我错了?
【解决方案2】:

我还没有尝试查看事件日志中的数据在 Vista/Win Server 2k8 (*.evtx) 中的可访问性,但 MMC 控制台是可扩展的,因此您现在可以编写自己的 MMC 插件。因此,如果您最终编写了自己的 EventVwr.msc 版本,那么现在就很容易了。

http://msdn.microsoft.com/en-us/library/ms692759(VS.85).aspx

您希望在自定义日志查看器中执行当前功能中缺少的哪些操作?

【讨论】:

    猜你喜欢
    • 2017-10-16
    • 1970-01-01
    • 1970-01-01
    • 2016-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    相关资源
    最近更新 更多