通過使用 .net framework 免費提供的類,可以克服所有這些限制,這樣可以使您有效地編寫應用程式,以便使用者、管理員或其他支援人員都可以檢視日誌來診斷問題。
返回頁首
.net framework 提供了乙個強大的 eventlog 類,用它可以輕鬆地處理事件日誌。不過您不能直接從 vb6 訪問此類,依照 vb fusion(英文)系列文章中的精神,可以通過建立封裝 .net 類的 com 包裝從 vb6 中訪問此功能。
我還建立了乙個練習此事件日誌功能的示例 vb6 應用程式。
圖 1:使用事件日誌功能的 vb6 應用程式
建立包裝類時,大部分工作只是將 .net 型別轉換為 vb6 可以理解的型別。geteventlogs 方法通常返回一組 eventlog 物件,不過不能直接從 vb6 中使用這些 eventlog 物件。但是,下列 vb.net 函式將計算機上的所有事件日誌的列表轉換為一組字串,vb6 很容易就可以使用這些字串。通常,您擁有系統事件日誌、安全性事件日誌和應用程式事件日誌,但是某些應用程式還會建立自己的自定義事件日誌,而此方法還可以顯示這些事件日誌:
清單 1:使用 vb.net 列出計算機上的所有事件日誌
public function geteventlogs() as string()您可以看到,eventlog 類使您能夠通過 geteventlogs 函式訪問所有事件日誌。呼叫此函式後,它就會遍歷結果,並將所有事件日誌名稱轉換為一組字串。然後,可以將此 vb.net **作為 com 物件進行公開,從而允許從 vb6 中呼叫它。dim logs(eventlog.geteventlogs.length - 1) as string
dim i as integer = 0
for each el as eventlog in eventlog.geteventlogs()
logs(i) = el.log
i += 1
next
return logs
end function
從 vb6 中呼叫此**以及(例如)用結果填充列表框就像下面這樣簡單:
清單 2:使用 vb6 在列表框中顯示日誌名稱
lsteventlogs.clear
dim logs() as string
logs = eventlog.geteventlogs
dim log as variant
for each log in logs
lsteventlogs.additem log
next
返回頁首
由於各種原因,您可能希望應用程式能夠寫入事件日誌。當然,應該將任何災難性錯誤都記錄到事件日誌中,因為此資訊以後可以用來診斷問題。您可能經常希望將不適合顯示給使用者的詳細資訊寫入該事件日誌中。
首先需要選擇使用哪個日誌。可以從系統事件日誌、安全性事件日誌或應用程式事件日誌中進行選擇。應用程式事件日誌幾乎總是正確的選擇,但是,如果需要,也可以建立自己的自定義事件日誌。事件日誌包裝中的下列 vb.net **使您能夠建立自己的自定義日誌:
清單 3:使用 vb.net 建立自定義事件日誌
public sub createeventsource(byval source as string, byval logname as string)您可以看到,使用 .net framework 可以輕鬆建立事件日誌。.net createeventsource 方法幫您完成了所有工作。此方法只提供了該功能,以便可以從 vb6 中輕鬆呼叫。if eventlog.sourceexists(source) then
eventlog.deleteeventsource(source)
end if
eventlog.createeventsource(source, logname)
end sub
清單 4:使用包裝類從 vb6 建立事件日誌
向事件日誌寫入條目同樣很簡單。writeentry vb.net 方法可以實現該事件日誌功能並提供該功能,以便可以從 vb6 中呼叫該方法:
清單 5:在 vb.net 中向事件日誌寫入條目
public sub writeentry(byval source as string, _此包裝方法提供了許多可選引數,因此從 vb6 中呼叫該方法時,您可以僅傳遞事件日誌**和訊息,也可以傳遞訊息型別、事件 id 和/或事件類別。byval message as string, _
optional byval type as string = "information", _
optional byval eventid as integer = 0, _
optional byval category as short = 0)
dim typeenum as eventlogentrytype = _
system.enum.parse(gettype(eventlogentrytype), type)
m_eventlog.writeentry(source, message, typeenum, eventid, category)
end sub
可以使用下列**從 vb6 中呼叫此方法:
清單 6:在 vb6 中寫入事件日誌條目
eventlog.writeentry cbolog.text, txtmessage, cbotype.text, _
txtid, txtcategory
返回頁首
從事件日誌中讀取資訊只是稍微有些複雜。.net framework eventlog 類有乙個 getentries 方法,它可以返回給定(應用程式、系統等)事件日誌的所有日誌條目。問題是每個條目都是作為 eventlogentry 物件返回的,不能將它們直接傳遞歸 vb6。但是,我可以簡單地建立自己的 eventlogentryinfo 類,用於將每個事件日誌條目複製到其中。它是乙個完整的 com 類,可以返回到 vb6,並且提供了條目**、訊息、型別、id 和類別屬性。然後,vb.net **將使用事件日誌條目資料填充這些屬性,並將其返回,以便可以從 vb6 中使用。
清單 7:在 vb.net 中讀取並轉換事件日誌條目:
public sub getentries(byref entries() as eventlogentryinfo)完成此函式後,vb6 便可以完全訪問事件日誌條目了。redim entries(m_eventlog.entries.count - 1)
for i as integer = 0 to m_eventlog.entries.count - 1
dim ent as eventlogentry = m_eventlog.entries(i)
entries(i) = new eventlogentryinfo
entries(i).category = ent.categorynumber
entries(i).message = ent.message
entries(i).source = ent.source
entries(i).eventid = ent.eventid
entries(i).entrytype = ent.entrytype
next
end sub
清單 8:在 vb6 中獲取事件日誌條目
eventlog.init logname
eventlog.getentries entries
返回頁首
Sql Server 監控 Job 執行情況
由於最近資料庫的部分job總是不能十分健康的執行,而監控起來只能登陸db伺服器去檢視錯誤日誌,維護起來十分麻煩,並且job一般都是比較重要的,比如備份資料庫或者清理資料庫等等。這邊,經常由於清理job不能正常執行,造成資料庫空間在幾天內增加 2g 3g 左右,最後排查發現,是由於執行清理的sql語句...
linux 檢視埠執行情況
netstat命令各個引數說明如下 t 指明顯示tcp埠 u 指明顯示udp埠 l 僅顯示監聽套接字 所謂套接字就是使應用程式能夠讀寫與收發通訊協議 protocol 與資料的程式 p 顯示程序識別符號和程式名稱,每乙個套接字 埠都屬於乙個程式。n 不進行dns輪詢,顯示ip 可以加速操作 即可顯示...
搬家計畫執行情況
今天一整天都在打包,書已經搞定了,亂七八糟的零碎也收拾了好多。老爸擔心我整理打包比較累,不過我這個人不太能吃苦,所以想了個辦法,我把電腦開啟,打算邊看節目邊整理,應該也蠻有意思的。不過,很快我就發現看電影電視都不方便,想想阿,收拾東西的時候沒有多少時間可以盯著電腦螢幕,可是不看螢幕是很影響看節目的。...