log4cpp 學習過程(三) 時間戳---- log4cpp/TimeStamp

 

首先介紹類的名字TimeStamp,這個單詞字母的意思是時間戳,可以想象郵局寄出信件的時間戳,即信件寄
出時蓋的當天的時間的章,它代表一個時間來作爲標記,以備使用,比如需要記錄日誌時,把這個時刻的
時間傳給TimeStamp,後面的其他日誌記錄類真正的記錄時,可以拿這個TimeStamp的時間作爲事件的發生
時刻;
    在整個工程裏搜索TimeStamp,這樣可以找到所有使用時間戳的地方,然後一個一個的研讀,
首先,LoggingEvent類會使用到這個時間戳BasicLayout
    學到的語法有二:
1::的使用,除了可以作爲C++的域作用符外,還有一個用法是表示:當在類內部使用函數時,如果類內
部的函數和全局函數有重名,默認調用的是類內部的成員函數,這個時候如果想調用全局函數,則可以用
這個::,它代表不使用類的成員函數,而是使用外部的全局函數;比如::gettimeofday(&tv, NULL);
 
2當存在未知數據大小的時候,可以使用 ostringstream 來代替 sprintf , 避免總是申請大量的緩衝區.
如果要重複使用一個ostringstream對象,並且需要在下次使用前清空緩衝區,則可以使用str()函數重設置
緩衝區. :
 
ostringstream  osSql;
//first time
osSql<<"SELECT  COUNT(*) FROM t_XXXX";
...
clsConnection.Query( osSql );
....
//second time
osSql.str("");//重新使用一個空的緩衝區
osSql<<"INSERT INTO **********"<<  strBigText  ;
.......
 
以下轉載 一篇關於 ostringstream 的用法 的文章
 
在寫程序的時候,我們往往需要對字符串進行格式化, 比如寫SQL語句的時候. ANSI C 中可以sprintf(),
 MFC中可以用CString::Format()對字符串進行格式化. 但前者無法實現字符串的動態增加,比如你定義
的字符緩存爲100個字節,如果你格式化以後的內容超出了100個字節,那邊後面的內容就無法看見. 所以一
般來講都爲定義一個足夠的字符緩衝,但這樣的效率是很差的. 後者雖然可以解決這個問題,但有一點, 
他和前者一樣,存在着安全隱患. 比如下面的代碼
 
       char buf[100]={0};
 
       const char* str = "string";
 
       sprintf(buf,"this is a string : %s , %s", str);
 
或者
 
       CString s;
 
        s.Format("this is a string: %s, %s",str);
 
前面那個%s對應第一個參數str,那麼第二個%s, 指針指向何方? 如果你幸運的話,什麼事也不會發生或者
你僅僅獲得一個你覺得莫名奇妙的字符串值. 但更嚴重的情況呢, 不用說----訪問越界!你的程序就等着迎
接臭名遠揚的Windows紅框吧!
 
       如果你使用STLsstream,那麼一切將歸於寂然:
 
      #include<sstream>
 
...
 
      ostringstream str;
 
     str<<"this is a str" << "string"<<"and this is a interger<<3<<endl;
 
     你不必考慮字符串的增長問題, 也不用在寫程序時去一一匹配你的format函數的format參數是否一一
匹配(如果你的參數很多,那麼這項檢查工作將是一個讓你頭痛萬分的工作). 
 
     一切都是如此的簡單. 
 
    如果你想獲取格式化好的字符串, 通過ostringstream::str()函數就可以返回一個string對象, 調用
string::c_str() string::data()函數就可以獲得一個指向字符緩衝的char*變量.
 
    另外, 我堅決建議用string替代CString . 因爲CString在設計時考慮到效率問題, 內存是重複利用的, 
:一個進程中所有的CString對象都使用同一個內存緩衝區,且這個內存區運行時不會釋放,直到進程結束
爲止. 如果緩衝不夠,他會無限制往上增長. 如果你設計的系統是一個7*24運行的系統且字符串分析工作量
很大,程序中產生了大量的CString對象的話, 你可能會發現你的內存會不斷的上漲. string同樣有一個很
優秀且高效率的內存管理機制,但他不會死守着你的內存不放,這一點你看看STL的源碼就知道了. 
 
     如果你覺定採用STL,那麼建議你使用VC7.0作爲開發環境或者GCC , 因爲這兩款開發工具對STL支持
是還算不錯.尤其是GCC. 如果你堅持用VC6的話,那麼你最好打上SP5補丁包, VC6STL的支持不夠理想. 
發佈了38 篇原創文章 · 獲贊 8 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章