1. 程式人生 > >boost log庫使用一

boost log庫使用一

pan 需要 tail 文件 ios key logs ger 結果

我的英文博客參考:http://csfreebird.blogspot.com/2013/12/use-boost-log-step1.html

我過去習慣使用cppcms提供的日誌庫,簡單好用。從1.54版本,Boost發布了日誌庫。當讀了一些文檔後,因為下面的一些原因,我決定轉而使用boost::log。

1. TCP服務大概連接了2000個設備,TCP server會保存所有詳細信息。舉個例子,設備登錄到TCP server,設備退出,設備發出消息,server發出消息。並且設備的數量在將來還會增長。這些導致會創建一些很大的日誌文件。

2. 需要分析日誌文件從而診斷TCP server的故障。也需要觀察我們的客戶是如何使用他們的設備。當有故障發生時,管理員要收到郵件通知。產品相關人員能夠在網站上看到用戶行為分析報告以幫助他們改進產品。

很顯然,boost的新的log庫為上述目的而設計的。正是我期待的。

這裏有一個例子,絕大多數代碼來自於boost log 文檔:http://www.boost.org/doc/libs/1_55_0/libs/log/doc/html/log/tutorial.html#log.tutorial.trivial

我使用Ubuntu 13.10, 安裝了clang 3.4,boost1.55是我用clang和 c++ 11選項編譯的。參考我的編譯命令如下:

./bootstrap.sh --with-libraries=system,filesystem,log,thread --with-toolset=clang
./b2 toolset=clang cxxflags="-std=c++11"

好,現在創建一個main.cc文件,然後寫下代碼如下:

#include <iostream>
#include <boost/log/trivial.hpp>

using namespace std;

int main () {
  cout << "hello, world" << endl;
  BOOST_LOG_TRIVIAL(trace) << "A trace severity message";
  BOOST_LOG_TRIVIAL(debug) << "A debug severity message"
; BOOST_LOG_TRIVIAL(info) << "An informational severity message"; BOOST_LOG_TRIVIAL(warning) << "A warning severity message"; BOOST_LOG_TRIVIAL(error) << "An error severity message"; BOOST_LOG_TRIVIAL(fatal) << "A fatal severity message"; }

執行編譯和鏈接命令:

c++ -g -std=c++11 -Wall -DBOOST_LOG_DYN_LINK -o ./main.o -c ./main.cc
c++ -g -std=c++11 ./main.o -o main -rdynamic -lpthread -lboost_log -lboost_system -lboost_thread -lboost_filesystem

現在運行程序./main,輸出結果如下:

$ ./main
hello, world
[2013-12-03 14:35:14.309093] [0x000007f362c17d74] [trace]   A trace severity message
[2013-12-03 14:35:14.309208] [0x000007f362c17d74] [debug]   A debug severity message
[2013-12-03 14:35:14.309224] [0x000007f362c17d74] [info]    An informational severity message
[2013-12-03 14:35:14.309237] [0x000007f362c17d74] [warning] A warning severity message
[2013-12-03 14:35:14.309250] [0x000007f362c17d74] [error]   An error severity message
[2013-12-03 14:35:14.309262] [0x000007f362c17d74] [fatal]   A fatal severity message

默認情況系,BOOST_LOG_TRIVIAL輸出所有信息到控制臺。有些人遇到了這個問題:

 undefined reference to `boost::log::v2s_mt_posix::trivial::logger::get()‘

編譯時添加一個宏即可解決。

 -DBOOST_LOG_DYN_LINK


再分享一下我老師大神的人工智能教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智能的隊伍中來!https://blog.csdn.net/jiangjunshow

boost log庫使用一