私が思いついた解決策は、System.Diagnostics.EventLogを使用し、すべてのイベントを単純に反復処理して、必要なイベントをフィルター処理することです。これは簡単だと思いますが、これにはもっと効率的なインターフェースがあったのではないかと思いました。提案や改善は大歓迎です!
特定の時間以降のイベント ログ エントリを返すメソッドを作成しました。
/// <summary>
/// Steps through each of the entries in the specified event log and returns any that were written
/// after the given point in time.
/// </summary>
/// <param name="logName">The event log to inspect, eg "Application"</param>
/// <param name="writtenSince">The point in time to return entries from</param>
/// <param name="type">The type of entry to return, or null for all entry types</param>
/// <returns>A list of all entries of interest, which may be empty if there were none in the event log.</returns>
public List<EventLogEntry> GetEventLogEntriesSince(string logName, DateTime writtenSince, EventLogEntryType type)
{
List<EventLogEntry> results = new List<EventLogEntry>();
EventLog eventLog = new System.Diagnostics.EventLog(logName);
foreach (EventLogEntry entry in eventLog.Entries)
{
if (entry.TimeWritten > writtenSince && (type==null || entry.EntryType == type))
results.Add(entry);
}
return results;
}
私のテストクラスでは、タイムスタンプを保存します:
private DateTime whenLastEventLogEntryWritten;
テストのセットアップ中に、タイムスタンプを最後のイベント ログ エントリが書き込まれた時刻に設定しました。
EventLog eventLog = new EventLog("Application");
whenLastEventLogEntryWritten = eventLog.Entries.Count > 0 ?
eventLog.Entries[eventLog.Entries.Count - 1] : DateTime.Now;
テストの最後に、イベント ログ エラーがないことを確認します。
Assert.IsEmpty(GetEventLogEntriesSince("Application",
whenLastEventLogEntryWritten,
EventLogEntryType.Error),
"Application Event Log errors occurred during test execution.");