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

boost log庫使用六

這次演示如何在一個程式中使用兩個sink. 這兩個sink有不同的filter,生成兩個日誌檔案,採用不同的日誌格式。

完整程式碼如下:

#include <fstream>
#include <boost/shared_ptr.hpp>
#include <boost/make_shared.hpp>
#include <boost/log/core.hpp>
#include <boost/log/trivial.hpp>
#include <boost/log/expressions.hpp>
#include <boost/log/sinks/sync_frontend.hpp>
#include <boost/log/sinks/text_ostream_backend.hpp>
#include <boost/log/sources/severity_logger.hpp>
#include <boost/log/sources/record_ostream.hpp>
#include <boost/log/utility/setup/common_attributes.hpp>
#include <boost/log/support/date_time.hpp>
#include <boost/thread/thread.hpp>
#include <boost/log/attributes/scoped_attribute.hpp>
namespace logging = boost::log;
namespace src = boost::log::sources;
namespace expr = boost::log::expressions;
namespace sinks = boost::log::sinks;
namespace keywords = boost::log::keywords;
using namespace logging::trivial;
void InitLog() {
  typedef sinks::synchronous_sink< sinks::text_ostream_backend > text_sink;
  boost::shared_ptr< text_sink > sink1 = boost::make_shared< text_sink >();
  sink1->locked_backend()->add_stream(
         boost::make_shared< std::ofstream >("sign.log"));
  sink1->set_formatter (
         expr::format("[%1%]<%2%>(%3%): %4%")
         % expr::format_date_time< boost::posix_time::ptime >("TimeStamp", "%Y-%m-%d %H:%M:%S")
         % logging::trivial::severity
         % expr::attr<boost::log::attributes::current_thread_id::value_type >("ThreadID")
         % expr::smessage
         );
  logging::core::get()->add_sink(sink1);
  sink1->set_filter(expr::attr< severity_level >("Severity") >= warning);
  boost::shared_ptr< text_sink > sink2 = boost::make_shared< text_sink >();
  sink2->locked_backend()->add_stream(
         boost::make_shared< std::ofstream >("sign.csv"));
  sink2->set_formatter (
         expr::format("%1%,%2%,%3%")
         % expr::format_date_time< boost::posix_time::ptime >("TimeStamp", "%Y-%m-%d %H:%M:%S")
         % logging::trivial::severity
         % expr::smessage
         );
  logging::core::get()->add_sink(sink2);
  sink2->set_filter(expr::attr< severity_level >("Severity") < warning);
  logging::add_common_attributes();
  BOOST_LOG_SCOPED_THREAD_TAG("ThreadID", boost::this_thread::get_id());
}
int main(int, char*[]) {
  InitLog();
  src::severity_logger<severity_level> lg;
  BOOST_LOG_SEV(lg, trace) << "A trace severity message";
  BOOST_LOG_SEV(lg, debug) << "A debug severity message";
  BOOST_LOG_SEV(lg, info) << "An informational severity message";
  BOOST_LOG_SEV(lg, warning) << "A warning severity message";
  BOOST_LOG_SEV(lg, error) << "An error severity message";
  BOOST_LOG_SEV(lg, fatal) << "A fatal severity message";
  return 0;
}
在上面的例子裡面,我建立了sink1 和 sink2物件。sink1輸出sign.log檔案,sink2輸出sign.csv檔案。

所有嚴重級別大於等於warning的日誌會出現在sign.log檔案中,所有低於warning的日誌會被記錄在sign.csv檔案中,並以csv格式儲存。

執行這個例子會看到兩個檔案的結果:

$ cat sign.csv
2013-12-25 16:31:27,trace,A trace severity message
2013-12-25 16:31:27,debug,A debug severity message
2013-12-25 16:31:27,info,An informational severity message 
$ cat sign.log
[2013-12-25 16:31:27]<warning>(0x00007f64b5cf3740): A warning severity message
[2013-12-25 16:31:27]<error>(0x00007f64b5cf3740): An error severity message
[2013-12-25 16:31:27]<fatal>(0x00007f64b5cf3740): A fatal severity message



相關推薦

boost log使用

這次演示如何在一個程式中使用兩個sink. 這兩個sink有不同的filter,生成兩個日誌檔案,採用不同的日誌格式。完整程式碼如下:#include <fstream> #include <boost/shared_ptr.hpp> #include

boost log學習一

對日誌的思考 為什麼需要日誌? 如今的應用程式都非常大,程式碼變得難以測試及除錯。而且更多的時候,這些程式執行在遠離開發人員的遠處,使得開發人員幾乎沒有機會監視程式的執行情況,並且一旦發生錯誤,很難找出錯誤的原因。此外,如果應用程式行為嚴重依非同步事件,

boost log使用 十二 架構研究和主要使用總結

架構下面是boost log庫的架構圖:簡單使用 下面總結一下和這個架構相關的知識:如何獲得Logging core#include <boost/log/core.hpp> ... boost::shared_ptr<logging::core> c

boost log學習使用三(輸出日誌到檔案)

程式日誌帶來的問題? 上面幾個例子都是將日誌資訊輸出到控制檯上,實際應用中不常用,最常用的情況是我們將日誌資訊輸出到文字檔案中,方便我們以後檢視,同時程式不執行時日誌資訊也不會丟掉。輸出到檔案中後,又帶來一些問題。假如程式一直執行,日誌資訊就要無限的記錄下去嗎

boost::log,示例程式碼

測試環境: [1]boost 1.57 [2]VS2013Update3 主要來源 [1]boost官網,做了些微小的改動。 最簡單的示例 // TestBoostLog.cpp : Defines the entry point for the console app

boost log使用一

pan 需要 tail 文件 ios key logs ger 結果 我的英文博客參考:http://csfreebird.blogspot.com/2013/12/use-boost-log-step1.html 我過去習慣使用cppcms提供的日誌庫,簡單好用。從1.

boost log學習二(日誌過濾)

為什麼要日誌分級,日誌過濾? 在程式中,經常將日誌分級,比如以下boost log常用的分級,當然我們可以根據自己需要新增或刪除一些日誌等級,後面的文章會講到。日誌分級的好處有很多,比如使日誌讀起來更加清晰,程式出錯時,我們就可以首先檢視error等級以上的日

boost log使用四

現在,將boost log應用到一個已經存在的C++程式中用來替代CppCMS log。我用它完成一些任務,單個日誌檔案尺寸小於10M,磁碟剩餘空間最小要保持3G。要達到這個目的,有些事情需要注意:1. 包含正確的標頭檔案:#include <boost/log/cor

Boost log

本文首先介紹了boost.log的幾個重要的概念,然後分析其框架結構,最後詳細解析了一段示例程式碼,並總結了將boost.log應用到自己的程式中時的步驟。 1. 幾個概念 日誌記錄:一個獨立的訊息包,這個訊息包還不是實際寫到日誌裡的訊息,它只是一個候選的訊息。 屬性:日

Boost log的使用

1. Boost的log庫最簡單的用法 #include <boost/log/trivial.hpp> void log_test() { BOOST_LOG_TRIVIAL(trace) << "A trace sev

Boost::thread的使用(轉)

http string col cpu 如果 定義 unlock opera stat 原文轉自 http://blog.csdn.net/lee353086/article/details/4673790 本文主要由線程啟動、Interruption機制、線程同步、等

thrift 編譯調用boost動態

thriftIn the project properties you must also set HAVE_CONFIG_H as force include the config header: "windows/confg.h"By default lib/cpp/windows/force_inc.h

Boost::thread的使用

說明 時間 target clas quest .net variables 正文 end Boost::thread庫的使用 2009/11/26 Kagula 最後更新日期 2016/12/02 閱讀對象 本文假設讀者有幾下Skills [1]

boost::thread 的使用

三種 pan turn ron space 足夠 urn cal 使用方式 轉載自: http://blog.csdn.net/yockie/article/details/9181939 概要通過實例介紹boost thread的使用方式,本文主要由線程啟動、Interr

樹莓派與Arduino Leonardo使用NRF24L01無線模塊通信之基於RF24 () 樹莓派查詢子節點溫濕度數據

put fort 自己 include signed 區分 hardware atoi ace nrl24l01每次只能發送4個字節,前面說到,第一個字節用於源節點,第二個字節用於目的節點。因此只剩下兩個字節用於溫度和濕度,一個字節只有八位,需要表示溫濕度的正負數,因此每個

Qpid第二課 配置Boost依賴環境變量

生效 如何 解決 cmake 動態庫 mode pan class 下載 場景 Qpid依賴Boost庫,一般情況下,使用CMake生成VS解決方案的時候,需要指定Boost頭文件和庫文件目錄,否則出現如下的錯誤編譯提示:Could not find the followi

一起學習Boost標準--Boost.StringAlgorithms

block 是否為字母 普通 wstring als 是否 內心 去除 emp 概述 在未使用Boost庫時,使用STL的std::string處理一些字符串時,總是不順手,特別是當用了C#/Python等語言後trim/split總要封裝一個方法來處理。如果沒有形成自己的

Boost Log

HR 決定 () otherwise 使用 boost log SQ fatal AC boost log支持以下配置宏,只列出一些常用的,如下表所示: Macro nameEffect BOOST_LOG_DYN_LINK If defined

boost::timer使用

type AS nbsp 定時 pan pre cpu 方法 運行 boost::timer boost庫定時器使用,需要在編譯時加相關鏈接庫 -lboost_timer -lboost_system boost::timer::cpu_timer 和boost::

Boost Log : Log record formatting

否則 share 使用 etime 教程 cti 對象 core hat Log record formatting 如果您嘗試運行前幾節中的示例,您可能已經註意到,只有日誌記錄消息被寫到文件中。當沒有設置格式器(formatter)時,這是Log庫的默認行為。除非指定格式