程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> C#3.0雜談之使用EventLog類寫Windows事件日志

C#3.0雜談之使用EventLog類寫Windows事件日志

編輯:關於C#

操作系統: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事件日志時要注意,如果事件日志文件已滿,可以在事件屬性對話框(在事件右鍵菜單中選擇“屬性”菜單項會彈出該對話框)中增加日志文件的大小,或清空當前事件中的日志。事件屬性對話框如下圖所示。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved