[C#]使用LINQ查出事件檢視器(Event Viewer)的資訊

[C#]使用LINQ查出事件檢視器(Event Viewer)的資訊

由於過去在處理客戶端的問題時常常要連線到客戶家的Server,先看看系統的Log、看看事件檢視器、看IIS Log等例行性動作,但有時候客戶端的Server可能不提供我們連線,這時候想要教會家裡沒有MIS的客戶將事件檢視器的資料匯出來寄給我都是一種挑戰,為了解決這個問題,花了一些時間寫了事件檢視器的資訊收集工具與Log Parser工具,而在這工具中要去過濾我想要的資料,就想來試看看LINQ這好東西,這是我第一次在我的程式中使用LINQ,使用的過程也有點跌跌撞撞,還好後來還是搞定了,以下是我的Code:


EventLog tLog = new EventLog();
//選取Application類的Log
tLog.Log = "Application";

//選出Type為Warring與Error,且時間介於選擇區間的Log
var AppLogEntries =
            from System.Diagnostics.EventLogEntry e2 in
                tLog.Entries
            where (e2.EntryType ==
               System.Diagnostics.EventLogEntryType.Warning || e2.EntryType ==
               System.Diagnostics.EventLogEntryType.Error) && e2.TimeGenerated >
               dtpStart.Value && e2.TimeGenerated < dtpEnd.Value
            //選出想要的欄位
            select new
            {
                e2.Source,
                e2.InstanceId,
                e2.Message,
                e2.TimeGenerated,
                e2.UserName,
                e2.EntryType,
            };

//放到DataSource上
dataGridView1.DataSource = AppLogEntries.ToList();

 

我在畫面上放了兩個DateTimePicker做為查詢的區間,按下按鈕後將這段時間內屬於Warring與Error類的Log查出來:

image

 

對照一下,確實有撈到我要的資料,太好了。

image

 

參考資料:

C# 3 LINQ(語法)

游舒帆 (gipi)

探索原力Co-founder,曾任TutorABC協理與鼎新電腦總監,並曾獲選兩屆微軟最有價值專家 ( MVP ),離開職場後創辦探索原力,致力於協助青少年培養面對未來的能力。認為教育與組織育才其實息息相關,都是在為未來儲備能量,2018年起成立為期一年的專題課程《職涯躍升的關鍵24堂課》,為培養台灣未來的領袖而努力。