Windows应用程序日志事件';错过';以某种方式使用我的EventLog

本文关键字:方式使 EventLog 我的 错过 应用程序 日志 事件 Windows | 更新日期: 2023-09-27 18:27:19

我编写了一个应用程序,该应用程序的一个组件使用特定的Source和EventID监视Windows应用程序日志中引发的事件,以便从中解析数据。然而,它似乎没有明显的原因错过了其中一些活动。

我包含了调试消息,试图查看问题所在——这采用了发送到文本字段的注释的形式。

将条目写入应用程序日志时,会在调试文本字段中添加一条带时间戳的消息,并调用parseApplicationLogEntry()

private void eventLogApplication_EntryWritten(object sender,
                                          System.Diagnostics.EntryWrittenEventArgs e)
{
    txtDebug.Text = txtDebug.Text + "'n " + DateTime.Now.ToLongTimeString() + 
        + ": Application Log has been written."; 
    parseApplicationLogEntry(); 
} 

将解析应用程序日志条目,并查看Source和EventID以确定它们是否是我们要查找的内容。调试文本中会添加一条带时间戳的消息,显示找到的Source和EventID

private void parseApplicationLogEntry()
{
    System.Diagnostics.EventLog log = new System.Diagnostics.EventLog("Application"); 
    int entry = log.Entries.Count - 1; 
    string logMessage = log.Entries[entry].Message;
    string logSource = log.Entries[entry].Source; 
    string logEventID = log.Entries[entry].InstanceId.ToString(); 
    log.Close(); 
    txtDebug.Text = txtDebug.Text + "'n " + DateTime.Now.ToLongTimeString() + 
        ": Application Log Source is " + logSource;
    txtDebug.Text = txtDebug.Text + "'n " + DateTime.Now.ToLongTimeString() + 
        ": Application Log EventID is " + logEventID; 
    if (logSource == "ExpectedSource" & logEventID == "ExpectedEventID")
    {
        // Do stuff 
    } 
}

这种行为在很多时候都是意料之中的,但有时也会出现非常奇怪的行为。

例如,有13个日志被写入到应用程序日志中。3个与所查找的源,10个与另一个源。调试文本显示看到了13个条目,所有条目的来源都不熟悉。。。

我不知道从这里到哪里去。

Windows应用程序日志事件';错过';以某种方式使用我的EventLog

不需要以这种方式访问EventLog来查看最新条目。

与每次写入新条目时调用方法迭代EventLog不同,使用每次写入条目时触发的事件处理程序更直接地访问条目更简单(更安全)。

private void eventLog_Application_EntryWritten(object sender, EntryWrittenEventArgs e)
{
    // Process e.Entry    
}