Pages

2014/06/20

[C#] イベントログをラムダ式で検索

イベントログを抽出したい場合、foreach ですべて列挙すると時間がかかってしまう。
これをラムダ式で検索したい場合は、以下のように行う。
// 一週間のうち、ソースが SecurityCenter であるイベントログを取得。
// 戻り値は IEnumerable となる。
var period = DateTime.Now.AddDays(-7);
var logName = "Application";
var machineName = ".";
if (EventLog.Exists(logName, machineName))
{
    var log = new EventLog(logName, machineName);
    var ret = log.Entries.Cast().Where(m => m.TimeGenerated >= period && m.Source == "SecurityCenter");
    log.Close();
}
なお、TimeGenerated には少々癖があり、必ずしもイベントログに書込まれた時間ではないらしい。

EventLogEntry.TimeGenerated プロパティ - msdn
http://msdn.microsoft.com/ja-jp/library/system.diagnostics.eventlogentry.timegenerated%28v=vs.110%29.aspx
Related Posts Plugin for WordPress, Blogger...