Scott Swigart 從事合并技術(shù)和聚合技術(shù)的咨詢、寫作和講解工作。
簡介
.NET Framework EventLog 類
方法
讀取日志
結(jié)論
簡介
Visual Basic 6 可通過“App.LogEvent”寫入事件日志。但是,此 API 有許多嚴(yán)格的限制。首先,不能為事件定義來源(在事件查看器中始終顯示為“VBRuntime”),而且不能指定事件 ID 或事件類別。還限制您只能寫入應(yīng)用程序事件日志,不能創(chuàng)建自己的自定義來源和日志。
通過使用 .NET Framework 免費(fèi)提供的類,可以克服所有這些限制,這樣可以使您有效地編寫應(yīng)用程序,以便用戶、管理員或其他支持人員都可以查看日志來診斷問題。
.NET Framework EventLog 類
.NET Framework 提供了一個(gè)強(qiáng)大的 EventLog 類,用它可以輕松地處理事件日志。不過您不能直接從 VB6 訪問此類,依照 VB Fusion(英文)系列文章中的精神,可以通過創(chuàng)建封裝 .NET 類的 COM 包裝從 VB6 中訪問此功能。
我還創(chuàng)建了一個(gè)練習(xí)此事件日志功能的示例 VB6 應(yīng)用程序。
創(chuàng)建包裝類時(shí),大部分工作只是將 .NET 類型轉(zhuǎn)換為 VB6 可以理解的類型。GetEventLogs 方法通常返回一組 EventLog 對象,不過不能直接從 VB6 中使用這些 EventLog 對象。但是,下列 VB.NET 函數(shù)將計(jì)算機(jī)上的所有事件日志的列表轉(zhuǎn)換為一組字符串,VB6 很容易就可以使用這些字符串。通常,您擁有系統(tǒng)事件日志、安全性事件日志和應(yīng)用程序事件日志,但是某些應(yīng)用程序還會創(chuàng)建自己的自定義事件日志,而此方法還可以顯示這些事件日志:
清單 1:使用 VB.NET 列出計(jì)算機(jī)上的所有事件日志
Public Function GetEventLogs() As String()Dim logs(EventLog.GetEventLogs.Length - 1) As StringDim i As Integer = 0For Each el As EventLog In EventLog.GetEventLogs()logs(i) = el.Logi += 1NextReturn logsEnd Function
您可以看到,EventLog 類使您能夠通過 GetEventLogs 函數(shù)訪問所有事件日志。調(diào)用此函數(shù)后,它就會遍歷結(jié)果,并將所有事件日志名稱轉(zhuǎn)換為一組字符串。然后,可以將此 VB.NET 代碼作為 COM 對象進(jìn)行公開,從而允許從 VB6 中調(diào)用它。
從 VB6 中調(diào)用此代碼以及(例如)用結(jié)果填充列表框就像下面這樣簡單:
清單 2:使用 VB6 在列表框中顯示日志名稱
Dim eventLog As NetFrameworkWrappers.EventLogWrapperSet eventLog = New NetFrameworkWrappers.EventLogWrapperlstEventLogs.ClearDim logs() As Stringlogs = eventLog.GetEventLogsDim log As VariantFor Each log In logslstEventLogs.AddItem logNext
簡介
.NET Framework EventLog 類
方法
讀取日志
結(jié)論
簡介
Visual Basic 6 可通過“App.LogEvent”寫入事件日志。但是,此 API 有許多嚴(yán)格的限制。首先,不能為事件定義來源(在事件查看器中始終顯示為“VBRuntime”),而且不能指定事件 ID 或事件類別。還限制您只能寫入應(yīng)用程序事件日志,不能創(chuàng)建自己的自定義來源和日志。
通過使用 .NET Framework 免費(fèi)提供的類,可以克服所有這些限制,這樣可以使您有效地編寫應(yīng)用程序,以便用戶、管理員或其他支持人員都可以查看日志來診斷問題。
.NET Framework EventLog 類
.NET Framework 提供了一個(gè)強(qiáng)大的 EventLog 類,用它可以輕松地處理事件日志。不過您不能直接從 VB6 訪問此類,依照 VB Fusion(英文)系列文章中的精神,可以通過創(chuàng)建封裝 .NET 類的 COM 包裝從 VB6 中訪問此功能。
我還創(chuàng)建了一個(gè)練習(xí)此事件日志功能的示例 VB6 應(yīng)用程序。
創(chuàng)建包裝類時(shí),大部分工作只是將 .NET 類型轉(zhuǎn)換為 VB6 可以理解的類型。GetEventLogs 方法通常返回一組 EventLog 對象,不過不能直接從 VB6 中使用這些 EventLog 對象。但是,下列 VB.NET 函數(shù)將計(jì)算機(jī)上的所有事件日志的列表轉(zhuǎn)換為一組字符串,VB6 很容易就可以使用這些字符串。通常,您擁有系統(tǒng)事件日志、安全性事件日志和應(yīng)用程序事件日志,但是某些應(yīng)用程序還會創(chuàng)建自己的自定義事件日志,而此方法還可以顯示這些事件日志:
清單 1:使用 VB.NET 列出計(jì)算機(jī)上的所有事件日志
Public Function GetEventLogs() As String()Dim logs(EventLog.GetEventLogs.Length - 1) As StringDim i As Integer = 0For Each el As EventLog In EventLog.GetEventLogs()logs(i) = el.Logi += 1NextReturn logsEnd Function
您可以看到,EventLog 類使您能夠通過 GetEventLogs 函數(shù)訪問所有事件日志。調(diào)用此函數(shù)后,它就會遍歷結(jié)果,并將所有事件日志名稱轉(zhuǎn)換為一組字符串。然后,可以將此 VB.NET 代碼作為 COM 對象進(jìn)行公開,從而允許從 VB6 中調(diào)用它。
從 VB6 中調(diào)用此代碼以及(例如)用結(jié)果填充列表框就像下面這樣簡單:
清單 2:使用 VB6 在列表框中顯示日志名稱
Dim eventLog As NetFrameworkWrappers.EventLogWrapperSet eventLog = New NetFrameworkWrappers.EventLogWrapperlstEventLogs.ClearDim logs() As Stringlogs = eventLog.GetEventLogsDim log As VariantFor Each log In logslstEventLogs.AddItem logNext