阅读 vb.net 中的事件日志详细信息

read event log detail in vb.net

我目前正在编写一个应用程序,其中一部分将从 windows 事件日志中抓取一些信息,它大部分都有效....

  Dim strValue As String
  Dim objLogs() As EventLog
  Dim Logname As String = "Application"
  Dim objEntry As EventLogEntry
  Dim objLogEntry As EventLogEntry
  Dim objLog As EventLog
  objLogs = EventLog.GetEventLogs()

  For Each objLog In objLogs
    If objLog.LogDisplayName = Logname Then
      For Each objLogEntry In objLog.Entries
        WriteLine("EventID")
        WriteLine("Machinename")
        WriteLine("message")
      Next
    Exit For
  End If
  Next

这将愉快地写出EventID、机器名称和事件消息。 details tab in event viewer

我想不通的是如何将事件查看器理想中的 "details" 选项卡输出为字符串或类似内容。

MSDN 没有帮助,有人能给我指出正确的方向吗?

提前致谢,

看起来 EventLogEntry 中的详细信息由存储为字节数组的数据 属性 表示。您将不得不将其转换为可读的内容。但是数据的格式似乎在 Windows OS 版本上有所不同。

这是另一种方法。从以下问题的答案复制代码并转换为 VB.Net.

Serializing a .NET EventLogEntry instance to XML

Imports System.Diagnostics.Eventing.Reader

Sub Main()
    Dim query As New EventLogQuery("System", PathType.LogName)
    Dim watcher As New EventLogWatcher(query)

    AddHandler watcher.EventRecordWritten, AddressOf watcher_EventRecordWritten
    watcher.Enabled = True
    Console.ReadLine()
End Sub

Public Sub watcher_EventRecordWritten(sender As Object, e As EventRecordWrittenEventArgs)
    Console.WriteLine(e.EventRecord.ToXml())
End Sub

放入一个简单控制台应用程序的主模块和一个监视系统事件的模块。将转换为 XML 的事件数据作为一个长字符串写出。

在 Windows 7 机器上使用 4.5 框架工作。