1. 程式人生 > >使用logcxx庫和boost庫構建系統日誌的格式化輸出

使用logcxx庫和boost庫構建系統日誌的格式化輸出

      logcxx庫作為一個強大的C++日誌系統,在業內得到越來越多的應用。但是logcxx庫欠缺一個格式化日誌輸出的能力,卻不能不說這是它的一個比較大的缺陷。當然你可以說藉助字串類的格式化功能,然後把它塞到logcxx庫的介面函式裡,比如標準C庫的snprintf函式,STL的std::ostringstream和MFC的CString的Format介面。snprintf的缺點在於你得先定義一個大緩衝區(不大的話擔心裝不下日誌資訊),而且它不是型別安全的;std::ostringstream使用安全,但是還是先得定義ostringstream物件來構造格式化字串;CString一則是MFC程式專用,二則它不是型別安全的,三則如果把它塞到logcxx庫接口裡,隱含了一個CString到char*的轉換操作。下面我要介紹的方法比上面的方法都要簡單和安全,那就是使用boost庫的boost::format和boost::lexical_cast。

      logcxx庫的使用方法這裡我不作贅述,大致是設定一個配置檔案,定義輸出方式、等級等,大家可以參考這篇文章:log4cxx 用法詳解。金慶大俠提出boost::format和logcxx庫配合使用(詳見參考文獻2),我試了一下很好用。不過我發現logcxx和boost::lexical_cast結合同樣好用。下面是測試程式碼:


編譯環境:Win XP + sp3,VS C++ 2005 + sp1

參考文獻: