国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

.Net下幾種日志管理方法

2024-07-10 13:09:48
字體:
來源:轉載
供稿:網友

.net下幾種日志管理方法

日志是應用程序中不可缺少的一部份,不僅可以記錄應用程序的運行狀態,還可以記錄一些bug,便于應用程序的更新與修改。
在.net有好幾種方法可以對日志進行管理。
1、數據庫日志。
2、文本日志。
3、系統事件日志。

首先,對于數據庫日志而言,它的使用簡單而且方便。這里就不做太多的討論,相信寫過與數據相關的項目的人都會用數據來記錄一些日志。然而它唯一不好的就是:必須先保證你的數據庫鏈接是正確無誤的。
然而這一保證不是必然的,所以這里我再討論一下其它的兩種情況,文本日志及系統事件日志。

文本日志:
它使用簡單,而且查看也方便。不好的就是不便于做大量的日志,而且日志內容的查看與分析都不方便。然而它還是可在在一些不適合數據庫日志的地方使用。例如一些測試消息的輸出,一些獨立組件的少量日志等。
一般情況下,為了方便管理,以天為單位對日志文件進行分類。這樣一來也可以簡單的對文件進行管理。例如:你的文件名可以知道這個日志是什么時候的,然后可以簡單的做一個類似數據庫一樣的查詢,管理也還方便。畢竟文本對系統來說是如此的簡單。
.net有一個診斷類,可以把文本以監聽的方式添加到trace以及debug上,這樣一來,你的所有指向trace和degug的輸出都會記錄到文件里去。這是一個很不錯的方法。

using system.diagnostics;

debug.listeners.add(new system.diagnostics.textwritertracelistener(datetime.now.tostring("yyyymmdd")+"..log"));
debug.listeners.add(new system.diagnostics.textwritertracelistener(console.out));

或者:
trace.listeners.add(new system.diagnostics.textwritertracelistener(datetime.now.tostring("yyyymmdd")+"..log"));
trace.listeners.add(new system.diagnostics.textwritertracelistener(console.out));

這里的區別是:trace在release下可以使用,而debug只在debug下使用。
我覺得所有的文本日志中,上面的方法是最好用的。你只須要再做一個日志管理的類就行了。
當然,還要注意,就是監聽在24小時后要更新一次,應該把當前的監聽清理掉,然后重新添加一個。這也簡單。
另一個方法就是自己寫文本進行管理。這樣的方法要略麻煩一點點,道也不難。

然而文本日志除了不便于做大量日志的工作以還,還有一個致命的問題:進程沖突!
因為文本日志要鎖定正在寫的文本文件,所以其它要寫該文件的程序會出現錯誤。一般情況下,如果應該程序只有一個副本在運行,而且把日志做為一個全局的靜態對象來處理,也不會有什么太大的問題。但程序的第二個副本會因為文件不能打開而啟動失敗。
這并不是一個無法解決的問題,只用保證程序有一個副本就行了。如果不保證的話,那么小有一點復雜,這里就不再討論了,下次有機會再討論這個問題。

對于上面的問題,我想暫時放棄文本日志,用系統的事件日志來處理。

系統事件日志:
.net下有一個eventlog類,它直接與系統的事件日志關聯。
簡單的一個:
eventlog.writeentry("logsource","this is a test log.");
就可以往系統里寫一個事件了。
然而把它用好也還有點點麻煩。首先是上面的方法會在系統的application下寫一個事件日志,而且為默認為information類型。這樣很不利于管理,大家可以在管理工具里看一下日志,就會發現大量的日志,自己寫的一個小日志簡直無法找到。
然而.net為我們提供了幾個方法來更好的管理日志。

1、添加一個新的logsource。
什么是logsource?其實簡單的說,它就是日志的一個分類標記,例如你可以用程序一次取出所以logsource為指定內容的日志。這樣一來,只要你記得這個source名,你就可以讀取和分類管理日志了。
默認情況下,你在直接用eventlog的靜態函數寫日志的時候,要指定一個logsource,如果logsource不存在,那么它就自動在application下建立一個,因此,創建logsource就這么簡單了。

2、添加一個新的log.
什么是log.這里的log是指系統事件日志里的大日志分類,一般情況下,系統有application,system和sercuity三個日志,每個下面有不同的soucce,這樣就構成了日志系統。
你不能獨立的創建一個log,因為.net里沒有提供任何方法來創建一個log,只能通過函數:createeventsource(string,string)
來創建一個sourcce,此時如果你這樣做:createeventsource("mysource","mylog");
你就會在日志管理器里看到多了一個mylog類,然而再這樣寫日志:
eventlog.writeentry("mysource","this is a test log.");
就可以寫一條記錄到mylog分類下,這樣就可以很好的管理自己的日志了。
需要說明的是:
如果source已經存在,那么創建會失敗。注意:不管source的哪個log下,只要source的名字已經存在,那么你的創建都會失敗。例如:如果有一個"source1"的日志在application里,那么你就不能再到其它log里再創建一個名為"source1"的日志了。另外:你用程序創建的日志不能在日志管理器里刪除它(messages可以刪除,但日志分類不能刪除)。方法是你還是用程序可以來刪除,或者在注冊表里來刪除它。它的位置:[hkey_local_machine/system/currentcontrolset/services/eventlog/]
看一下注冊表,或許你會明白一些。
最后就是用日志實例對象來寫日志。你可以指定一個log名和一個source名來寫日志,但要注意,必須是log與source匹配,否則也會出現錯誤。這比直接用靜態方法來寫日志要復雜一點點,但你有更多的自由空間。
系統事件日志不好的地方就是日志只保存三個月,而且不好管理。如果你可以直接管理服務器,或者就在本機上運行應該會好一些,否則你就不得不自己寫些代碼來管理日志了。當然,如果一些重要的日志,可以導出到其它文件中。
它的好處是很多的:
1、不必與數據庫鏈接,效率會高一些,也不會有數據庫訪問失敗的問題。
2、不會有進程沖突問題,它是系統的日志,不管是什么應用程序都可以寫日志。
3、全局可用,不管在哪里都可以直接寫日志,而且可讀。因此可以把它當成一個消息通信平臺。(當然,可能只有那些大腦有點問題的人會這樣做。)然而我只是想說明:a進程寫的日志,b進程可以直接讀取。

好了,關于日志這次就總結這些。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 京山县| 镶黄旗| 垦利县| 大余县| 长沙县| 三亚市| 巨野县| 六枝特区| 福贡县| 梁河县| 洪江市| 汉中市| 寿光市| 全南县| 徐州市| 廉江市| 穆棱市| 绍兴县| 保定市| 张北县| 钦州市| 定南县| 丰台区| 大英县| 安徽省| 西和县| 大洼县| 泸溪县| 会泽县| 宜君县| 鹤庆县| 绥滨县| 红桥区| 类乌齐县| 独山县| 临海市| 桐柏县| 精河县| 张家界市| 松桃| 都江堰市|