boost log库 使用十
来源:互联网 发布:淘宝怎么增加自然流量 编辑:程序博客网 时间:2024/05/16 17:17
在boost log库 使用九的demo中,还有一些地方可以提高。
首先,把所有和boost log相关的语句都移到logger.h文件中。任何使用boost log库的程序都可以include 这个logger.h文件。如果你想要不同的sink,可以修改一下InitLog函数。
#include <boost/shared_ptr.hpp>#include <boost/make_shared.hpp>#include <boost/thread/thread.hpp>#include <boost/log/core.hpp>#include <boost/log/sinks/sync_frontend.hpp>#include <boost/log/sinks/text_ostream_backend.hpp>#include <boost/log/sources/record_ostream.hpp>#include <boost/log/support/date_time.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/setup/common_attributes.hpp>#include <boost/log/utility/setup/common_attributes.hpp>#include <boost/log/utility/setup/formatter_parser.hpp>#include <boost/log/sources/severity_logger.hpp>#include <boost/log/sources/severity_feature.hpp>#include <fstream>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;enum sign_severity_level { trace, debug, info, warning, error, fatal, report};void InitLog() { typedef sinks::synchronous_sink<sinks::text_ostream_backend> TextSink; // init sink1 boost::shared_ptr<sinks::text_ostream_backend> backend1 = boost::make_shared<sinks::text_ostream_backend>(); backend1->add_stream(boost::shared_ptr<std::ostream>(new std::ofstream("sign.log"))); boost::shared_ptr<TextSink> sink1(new TextSink(backend1)); sink1->set_formatter ( expr::format("[%1%]<%2%>(%3%): %4%") % expr::format_date_time< boost::posix_time::ptime >("TimeStamp", "%Y-%m-%d %H:%M:%S") % expr::attr<sign_severity_level>("Severity") % expr::attr<attrs::current_thread_id::value_type >("ThreadID") % expr::smessage ); sink1->set_filter(expr::attr<sign_severity_level>("Severity") >= warning); logging::core::get()->add_sink(sink1); // init sink2 boost::shared_ptr<sinks::text_ostream_backend> backend2 = boost::make_shared<sinks::text_ostream_backend>(); backend2->auto_flush(true); backend2->add_stream(boost::shared_ptr<std::ostream>(new std::ofstream("sign.csv"))); boost::shared_ptr<TextSink> sink2(new TextSink(backend2)); sink2->set_formatter ( expr::format("%1%,%2%,%3%") % expr::format_date_time< boost::posix_time::ptime >("TimeStamp", "%Y-%m-%d %H:%M:%S") % expr::attr<sign_severity_level>("Severity") % expr::smessage ); sink2->set_filter(expr::attr<sign_severity_level>("Severity") == report); logging::core::get()->add_sink(sink2); logging::add_common_attributes(); logging::core::get()->add_global_attribute("ThreadID", attrs::current_thread_id());}BOOST_LOG_INLINE_GLOBAL_LOGGER_DEFAULT(my_logger, src::severity_logger_mt<sign_severity_level>)
其次, 阻止程序的crash. 看一下官方的文章:http://www.boost.org/doc/libs/1_55_0/libs/log/doc/html/log/rationale/why_crash_on_term.html
我采用了第二种解决方案,在main函数的退出语句之前加一行
#include "logger.h"int main(int, char*[]) { InitLog(); src::severity_logger_mt<sign_severity_level>& lg = my_logger::get(); 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"; BOOST_LOG_SEV(lg, report) << "A report severity message"; logging::core::get()->remove_all_sinks(); return 0;}
下一次,将在两个sinks上采用rotation log.
1 0
- boost log库 使用十
- boost log库使用一
- boost log库使用二
- boost log库使用三
- boost log库使用四
- boost log库使用五
- boost log库使用六
- boost log库 使用七
- boost log库 使用八
- boost log库 使用九
- boost log库 使用十一
- Boost log库的使用
- Boost Log库使用介绍
- BOOST Log 使用 Unicode
- Boost log 简单使用
- boost log 使用问题
- Boost log 简单使用
- boost的log使用
- hdu-2546 饭卡 01背包
- 百度地图静态图之坐标转换
- jsp页面不能显示图片问题
- 26 Hints for Agile Software Development
- Filter(四)常用应用2---使浏览器不缓冲动态资源
- boost log库 使用十
- 敏捷开发的实战经验
- 产品项目的九个敏捷开发经验
- C#的第一个程序
- ios UITabBarController
- <![CDATA]>初探
- Oracle查看SQL历史
- Scrum:兼顾计划与灵活的敏捷开发
- 基于手机和PLC的智能家居系统