2014-10-20 134 views
1

我已经编写了一个应用程序,它是一个组件,其中的事件在Windows应用程序日志中引发,并具有特定的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(); 
} 

应用程序日志条目解析,来源和事件ID在看着以确定它们是否是我们所期待的。带时间标记的消息添加到显示找到的源和事件ID的调试文本中。

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个条目被看到,所有与陌生的来源...

我不知道该从哪里去。

回答

0

没有必要以这种方式访问​​EventLog来查看最新的条目。

每次写入新条目时,不要调用一个方法遍历EventLog,而是使用每次写入Entry时触发的事件处理程序来更直接地访问Entry,这更简单(也更安全)。

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