boost::log庫,示例程式碼
測試環境:
[1]boost 1.57
[2]VS2013Update3
主要來源
[1]boost官網,做了些微小的改動。
最簡單的示例
// TestBoostLog.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <iostream> #include <boost/log/trivial.hpp> ////////////////////////////////////////////////////////////////////////// // Title: Test Boost Log, Example 1 // Environment: VS2013Upate4, boost 1.57 // description: output trace to the console! ////////////////////////////////////////////////////////////////////////// // The example dependent 6 boost library // boost_chrono // boost_date_time // boost_filesystem // boost_log // boost_system // boost_thread ////////////////////////////////////////////////////////////////////////// namespace logging = boost::log; namespace src = boost::log::sources; namespace expr = boost::log::expressions; namespace sinks = boost::log::sinks; namespace attrs = boost::log::attributes; namespace keywords = boost::log::keywords; int _tmain(int argc, _TCHAR* argv[]) { BOOST_LOG_TRIVIAL(trace) << "測試中文能否正確輸出(GBK編碼)"; 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"; std::cin.get(); return 0; }
最實用的示例
#include "KagulaLog.h" #include <boost/log/core.hpp> #include <boost/log/trivial.hpp> #include <boost/log/expressions.hpp> #include <boost/log/sinks/text_file_backend.hpp> #include <boost/log/utility/setup/file.hpp> #include <boost/log/utility/setup/common_attributes.hpp> #include <boost/log/sources/severity_logger.hpp> #include <boost/log/sources/record_ostream.hpp> namespace logging = boost::log; namespace src = boost::log::sources; namespace sinks = boost::log::sinks; namespace keywords = boost::log::keywords; //[ example_tutorial_file_advanced void init() { auto file_sink = logging::add_file_log ( keywords::file_name = "sample_%N.log", /*< file name pattern >*/ keywords::rotation_size = 10 * 1024 * 1024, /*< rotate files every 10 MiB... >*/ keywords::time_based_rotation = sinks::file::rotation_at_time_point(0, 0, 0), /*< ...or at midnight >*/ keywords::format = "[%TimeStamp%]: %Message%" /*< log record format >*/ ); file_sink->locked_backend()->set_file_collector(sinks::file::make_collector( keywords::target = "logs", //folder name. keywords::max_size = 50 * 1024 * 1024, //The maximum amount of space of the folder. keywords::min_free_space = 100 * 1024 * 1024 //Reserved disk space minimum. )); file_sink->locked_backend()->scan_for_files(); logging::core::get()->set_filter ( logging::trivial::severity >= logging::trivial::info ); } //] namespace kagula { void test() { init(); logging::add_common_attributes(); using namespace logging::trivial; src::severity_logger< severity_level > lg; BOOST_LOG_SEV(lg, trace) << "A trace severity message (測試中文能否正確輸出(GBK編碼))"; 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"; BOOST_LOG_SEV(lg, fatal) << "測試中文能否正確輸出(GBK編碼)"; } }
多執行緒示例
/* * Copyright Andrey Semashev 2007 - 2013. * Distributed under the Boost Software License, Version 1.0. * (See accompanying file LICENSE_1_0.txt or copy at * http://www.boost.org/LICENSE_1_0.txt) */ /*! * \file main.cpp * \author Andrey Semashev * \date 30.08.2009 * * \brief An example of asynchronous logging with bounded log record queue in multiple threads. */ // #define BOOST_LOG_DYN_LINK 1 #include <stdexcept> #include <string> #include <iostream> #include <fstream> #include <functional> #include <boost/ref.hpp> #include <boost/bind.hpp> #include <boost/shared_ptr.hpp> #include <boost/date_time/posix_time/posix_time.hpp> #include <boost/thread/thread.hpp> #include <boost/thread/barrier.hpp> #include <boost/log/common.hpp> #include <boost/log/expressions.hpp> #include <boost/log/attributes.hpp> #include <boost/log/sinks.hpp> #include <boost/log/sources/logger.hpp> #include <boost/log/utility/empty_deleter.hpp> #include <boost/log/utility/record_ordering.hpp> namespace logging = boost::log; namespace attrs = boost::log::attributes; namespace src = boost::log::sources; namespace sinks = boost::log::sinks; namespace expr = boost::log::expressions; namespace keywords = boost::log::keywords; using boost::shared_ptr; enum { LOG_RECORDS_TO_WRITE = 10000, THREAD_COUNT = 2 }; BOOST_LOG_INLINE_GLOBAL_LOGGER_DEFAULT(test_lg, src::logger_mt) //! This function is executed in multiple threads void thread_fun(boost::barrier& bar) { // Wait until all threads are created bar.wait(); // Here we go. First, identify the thread. BOOST_LOG_SCOPED_THREAD_TAG("ThreadID", boost::this_thread::get_id()); // Now, do some logging for (unsigned int i = 0; i < LOG_RECORDS_TO_WRITE; ++i) { BOOST_LOG(test_lg::get()) << "Log record " << i; } } int main(int argc, char* argv[]) { try { // Open a rotating text file shared_ptr< std::ostream > strm(new std::ofstream("test.log")); if (!strm->good()) throw std::runtime_error("Failed to open a text log file"); // Create a text file sink typedef sinks::text_ostream_backend backend_t; typedef sinks::asynchronous_sink< backend_t, sinks::bounded_ordering_queue< logging::attribute_value_ordering< unsigned int, std::less< unsigned int > >, 128, // queue no more than 128 log records sinks::block_on_overflow // wait until records are processed > > sink_t; shared_ptr< sink_t > sink(new sink_t( boost::make_shared< backend_t >(), // We'll apply record ordering to ensure that records from different threads go sequentially in the file keywords::order = logging::make_attr_ordering("RecordID", std::less< unsigned int >()))); sink->locked_backend()->add_stream(strm); sink->set_formatter ( expr::format("%1%: [%2%] [%3%] - %4%") % expr::attr< unsigned int >("RecordID") % expr::attr< boost::posix_time::ptime >("TimeStamp") % expr::attr< boost::thread::id >("ThreadID") % expr::smessage ); // Add it to the core logging::core::get()->add_sink(sink); // Add some attributes too logging::core::get()->add_global_attribute("TimeStamp", attrs::local_clock()); logging::core::get()->add_global_attribute("RecordID", attrs::counter< unsigned int >()); // Create logging threads boost::barrier bar(THREAD_COUNT); boost::thread_group threads; for (unsigned int i = 0; i < THREAD_COUNT; ++i) threads.create_thread(boost::bind(&thread_fun, boost::ref(bar))); // Wait until all action ends threads.join_all(); // Flush all buffered records sink->stop(); sink->flush(); return 0; } catch (std::exception& e) { std::cout << "FAILURE: " << e.what() << std::endl; return 1; } }
相關推薦
boost::log庫,示例程式碼
測試環境: [1]boost 1.57 [2]VS2013Update3 主要來源 [1]boost官網,做了些微小的改動。 最簡單的示例 // TestBoostLog.cpp : Defines the entry point for the console app
python:簡單爬蟲示例,含分析文件,建庫,程式程式碼
環境:ubantu18.04,mysql5.7,python3.6 1.分析文件 1.1 目標 爬取笑話集-最新兒童笑話大全前三頁的笑話題目,訪問量,發表時間 1.2 URL 第一頁:www.jokeji.cn/list7_1.htm 第三頁:www.jokej
boost thread庫,奇怪的文件沒有Tutorial的庫,但是卻仍然相當強大
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
常用的670個Python庫和示例程式碼(快速上手+必備收藏)
一個不錯的搜尋Example的網站:http://www.programcreek.com/python/ 通過分析github上5000個開源python專案,找出最常用的庫。下面是前670個。括號裡的數字代表出現的頻率,最大為5000。
boost log庫學習一
對日誌的思考 為什麼需要日誌? 如今的應用程式都非常大,程式碼變得難以測試及除錯。而且更多的時候,這些程式執行在遠離開發人員的遠處,使得開發人員幾乎沒有機會監視程式的執行情況,並且一旦發生錯誤,很難找出錯誤的原因。此外,如果應用程式行為嚴重依非同步事件,
boost log庫使用 十二 架構研究和主要使用總結
架構下面是boost log庫的架構圖:簡單使用 下面總結一下和這個架構相關的知識:如何獲得Logging core#include <boost/log/core.hpp> ... boost::shared_ptr<logging::core> c
boost log庫學習使用三(輸出日誌到檔案)
程式日誌帶來的問題? 上面幾個例子都是將日誌資訊輸出到控制檯上,實際應用中不常用,最常用的情況是我們將日誌資訊輸出到文字檔案中,方便我們以後檢視,同時程式不執行時日誌資訊也不會丟掉。輸出到檔案中後,又帶來一些問題。假如程式一直執行,日誌資訊就要無限的記錄下去嗎
boost log庫使用六
這次演示如何在一個程式中使用兩個sink. 這兩個sink有不同的filter,生成兩個日誌檔案,採用不同的日誌格式。完整程式碼如下:#include <fstream> #include <boost/shared_ptr.hpp> #include
前端介面操作資料表(知識點描述,思維導圖,示例程式碼,效果截圖)
SqlConnection sqlConnection = new SqlConnection(); //宣告並例項化SQL連線; sqlConnection.ConnectionString
libJPEG-turbo庫使用示例程式碼
1 #include <iostream> 2 #include <stdio.h> 3 #include <setjmp.h> 4 #include <string.h> 5 #include <stdlib.h&g
Android Architecture 1 -- Guide to App Architecture(App架構入門,示例程式碼演示)
面臨的問題 Android的各大元件可以隨意跳轉,可不遵守順序。比如QQ分享調相簿APP,相簿APP跳檔案管理APP。 還可能被系統殺死。所以最好 you should not store any app data or state in your 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等級以上的日
CGO,GOLANG呼叫C庫,呼叫程式碼、靜態庫或動態庫
CGO CGO可以讓golang和c互相呼叫,譬如x264或者aac編解碼,用go再實現一遍比較麻煩,直接呼叫c的函式會更合適。 CGO可以直接用C的程式碼,或者C的靜態庫,或者動態庫,當然C++也是可以的。 在import “C”之前加pre
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
mongoDB官網中Storing Log Data的python示例程式碼有誤,
如題, 在這篇文章中的python程式碼中, 構造一個記錄的程式碼如下: >>> event = { ... _id: bson.ObjectId(), ... host: "127.0.0.1"
使用boost庫,無法釋放udp端口的問題
timeout udp端口 p s image logs 來講 red 本地 spa 在使用boost的socket封裝庫的時候,遇見一個奇怪的問題,就是關閉boost的udp socket,但是 udp的端口一直沒有釋放,這是一個很嚴重的問題,因為對於服務器來講,由於一直
Boost 1.59.0 編譯支援Python3的連結庫,生成vc120或vc140
Boost 1.59.0 編譯支援Python3的連結庫,生成vc120或vc140 官方編譯的Boost中只帶了Python2的連結庫,Python3的連結庫需要自己特別編譯,官方編譯版下載地址:http://sourceforge.net/projects/boost/files/boo