來自:http://androidguy.blog.51cto.com/974126/214966 操作系統: Windows XP SP3 開發工具: Visual Studio 2008
語言: C# 3.0
.net Framework: 3.5
在程序中經常需要將指定的信息(包括異常信息和正常處理信息)寫到日誌中。在C#3.0中可以使用EventLog類將各種信息直接寫入Windows日誌。EventLog類在System.Diagnostics命名空間中。我們可以在“管理工具” > "事件查看器“中可以查看我們寫入的Windows日誌,如下圖所示:
下面是一個使用EventLog類嚮應用程序(Application)寫入日誌的例子,日誌類型使用EventLogEntryType枚舉類型指定。
EventLog log = new EventLog();
try { log.Source = "我的應用程序"; log.WriteEntry("處理信息1", EventLogEntryType.Information); log.WriteEntry("處理信息2", EventLogEntryType.Information); throw new System.IO.FileNotFoundException("readme.txt文件未找到"); } catch (System.IO.FileNotFoundException exception) { log.WriteEntry("處理信息2", EventLogEntryType.Error); } 在運行上面的代碼後,將會寫入如下圖所示的日誌信息。
其中WriteEntry方法的第一個參數指定的信息通過雙擊相應的日誌可以查看,如下圖所示。
在默認情況下,EventLog類將日誌寫在Application事件裏,通過EventLog的構造方法的參數也可以指定其他的日誌,如系統(System)事件,但要注意在向非Application事件寫日誌信息時,需要先使用CreateEventSource方法將事件源添加到當前事件中。下面的例子演示瞭如何向“系統”事件中添加日誌信息:
EventLog log = new EventLog("System");
// 首先應判斷日誌來源是否存在,一個日誌來源只能同時與一個事件綁定s if(!EventLog.SourceExists("My Application")) EventLog.CreateEventSource("My Application", "System"); try { log.Source = "My Application"; log.WriteEntry("處理信息1", EventLogEntryType.Information); log.WriteEntry("處理信息2", EventLogEntryType.Information); throw new System.IO.FileNotFoundException("readme.txt文件未找到"); } catch (System.IO.FileNotFoundException exception) { log.WriteEntry(exception.Message, EventLogEntryType.Error); } 在執行上面的代碼後,向System事件寫入的日誌如下圖所示。
我們也可以通過EventLog類的添加自己的事件,代碼如下:
EventLog log = new EventLog("MyEvent");
// 首先應判斷日誌來源是否存在,一個日誌來源只能同時與一個事件綁定s if(!EventLog.SourceExists("New Application")) EventLog.CreateEventSource("New Application", "MyEvent"); try { log.Source = "New Applications"; log.WriteEntry("處理信息1", EventLogEntryType.Information); log.WriteEntry("處理信息2", EventLogEntryType.Information); throw new System.IO.FileNotFoundException("readme.txt文件未找到"); } catch (System.IO.FileNotFoundException exception) { log.WriteEntry(exception.Message, EventLogEntryType.Error); } 上面的代碼添加了一個MyEvent事件,添加後的事件查看器界面如下圖所示。
從上圖可以看出,左側的事件查看器中多了個MyEvent事件。
我們還可以使用EventLog類來枚舉指定事件中的日誌,如下面的代碼所示: if (EventLog.Exists("MyEvent"))
{ EventLog log = new EventLog("MyEvent"); foreach (EventLogEntry entry in log.Entries) { textBox1.Text += entry.Message + ":"; } } 上面的代碼枚舉了剛纔建立的MyEvent事件中的所有日誌,並輸出了每一個日誌的信息(就是WriteEntry方法的第一個參數指定的信息)。除此之外,我們還可以使用Delete方法刪除指定的事件,使用DeleteEventSource方法刪除日誌源。
在寫入Windows事件日誌時要注意,如果事件日誌文件已滿,可以在事件屬性對話框(在事件右鍵菜單中選擇“屬性”菜單項會彈出該對話框)中增加日誌文件的大小,或清空當前事件中的日誌。事件屬性對話框如下圖所示。 |