【问题标题】:read event log detail in vb.net在 vb.net 中读取事件日志详细信息
【发布时间】:2016-05-18 06:22:35
【问题描述】:

我现在正在编写一个应用程序,其中一部分会从 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

我不知道如何将事件查看器中的“详细信息”选项卡输出为字符串或类似内容。

MSDN 没有帮助,谁能指点我正确的方向?

提前致谢,

【问题讨论】:

    标签: vb.net events event-log


    【解决方案1】:

    看起来 EventLogEntry 中的详细信息由存储为字节数组的 Data 属性表示。您将不得不将其转换为可读的东西。但数据的格式似乎因 Windows 操作系统版本而异。

    这里有另一种方法。从以下问题的答案复制代码并转换为 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 框架工作。

    【讨论】:

    • 太棒了,目前我有一个计时器,它每 60 秒只查找从现在到最后一次检查并刮取数据的最后写入日志。观察者是否会做类似的事情,因为它只是在主动写入日志时读取它们? (编辑,回车键保存不回车)
    • 即使作为一个控制台应用程序它只是运行然后在几秒钟后结束,我是否遗漏了一些实现?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-02
    • 1970-01-01
    • 2014-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多