標題: Re: [問題] log記錄器怎麼架比較通用又簡單方便?
時間: Sat Nov 8 19:38:46 2008
※ 引述《NDark (*代客拼圖*)》之銘言:
> 專門用來紀錄系統exception的紀錄器.程式結束或是定期會存一個文字檔.
> 不知道其他專案是什麼做的?
> 之前是隨手寫個 "在只會有單一物件的某class中寫一個string的vector"
> 不管main loop或是class中有什麼exception就全丟字串進去記起來.
> class object要釋放之前再寫檔.
buffered output 機制只是實作手法而已 先不討論
> 不過後來想想這種東西應該獨立出來比較能讓整個系統都能記log.
> 這樣的話就會變成一個很底層的函式或是類別.
java 有個類似的東西叫 logger
un*x 也有個很像的機制叫做 syslogd
只要程式呼叫 syslog 這個 system call 就會把資料寫進某個檔案
> 不過這樣每個類別都要引用這個東西,(變成祖國不可分離的一部分XD)
> 好像會不會反而造成困擾?
作為系統的基礎建設 本來就會跟大家產生相依關係
但其實我覺得還好 換個方向想 因為都相依於同一個 logger
不需要的時候只要把實作的 .so 或 .dll 換空函式實作就可以關掉了
> 不知道尻手知不知道有沒有什麼比較通用簡單方便的機制?
> 我用的目的是為了自己比較好debug,出了什麼問題就先去看這個log.
其實我們用的也是一個 singleton logger
手法的變化大概不大 我用過好幾個都差不多 主要是方便性與彈性
之前用的 logger 有分 class (module)/level
輸出 log 時可以透過一些參數來過濾 對除錯很有幫助
> 比較常用這樣寫法:
> if( false == 檢查靜坐女學生健康() )
> {
> SYSTEMLOG( "警告!! 某函式裡面 :: 檢查失敗" );
> return false ;
> }
> 其他人的code我看過的只有windows程式裡面用這種方式的.
> try
> {
> 消防檢查
> }
> catch()
> {
> MeesageBox "失火啦" // 反正在windows機制裡面應該都可以用?
> // 所以也不用特地引用什麼.
> // 但是如果是在某個工具類別裡面就不能這樣用了.
> // 我認為工具內應該不需要讓windows的結構滲透進去.
> }
AOP 需要額外支援 傳統程式語言大概不太容易做到
少了語言機制的話 就只能用這種彆扭的方式來寫啦
有 exception 的話當然很方便 至少運算邏輯乾淨多了
不會混一堆錯誤檢查 (但也要保證底層一定會丟出 exception)
c 的話只能靠 setjmp 幫忙...
另外也可以考慮做在 assertion macro 裡 (參考 assert.h)
雖然語意上會有點差異 但概念上是類似的 可以借來用
(assertion 一般是用來檢查百分之百會發生的狀況 而不是例外狀況)
[m
--
[1;32m※ Origin: [33mVisionBBS @ CSIE.NCKU [37m
[1;32m※ From : [36mvision.csie.ncku.edu.tw [m
※ X-Info: NDark -> ndark@vision.csie.ncku.edu.tw
※ X-Sign: 14HB88II./PZWxMArdik (08/11/08 22:24:18 )
沒有留言:
張貼留言
您好.本資料庫並非第一手資料.如果你有對文章作者的詢問,意見與需求,請自行找尋文章作者並提供意見,謝謝.