=================================版权声明=================================
版权声明:本文为博主原创文章 未经许可不得转载
请通过右侧公告中的“联系邮箱(wlsandwho@foxmail.com)”联系我
未经作者授权勿用于学术性引用。
未经作者授权勿用于商业出版、商业印刷、商业引用以及其他商业用途。
本文不定期修正完善,为保证内容正确,建议移步原文处阅读。 <--------总有一天我要自己做一个模板干掉这只土豆
本文链接:http://www.cnblogs.com/wlsandwho/p/4666418.html
耻辱墙:http://www.cnblogs.com/wlsandwho/p/4206472.html
=======================================================================
也不知道写的对不对,目前能用就好。
=======================================================================
自动生成文件名、设置过滤等级、设置日志格式、输出到完备日志和重要日志
(部分功能没用到就不删除了,也不碍事。)
=======================================================================
日志格式:
00000001 2015-07-22_09:14:35.771886 <fatal> 王林森原创 未经许可请勿转载 侵权必究
( 行号 ) ( 时间戳 ) (等级) ( 内容 )
=======================================================================
头文件
1 #include <iostream> 2 #include <boost/locale/generator.hpp> 3 #include <boost/date_time/posix_time/posix_time_types.hpp> 4 #include <boost/log/common.hpp> 5 #include <boost/log/expressions.hpp> 6 #include <boost/log/utility/setup/file.hpp> 7 #include <boost/log/utility/setup/console.hpp> 8 #include <boost/log/utility/setup/common_attributes.hpp> 9 #include <boost/log/sources/logger.hpp> 10 #include <boost/log/support/date_time.hpp> 11 #include <cstddef> 12 #include <string> 13 #include <fstream> 14 #include <iomanip> 15 #include <boost/smart_ptr/shared_ptr.hpp> 16 #include <boost/smart_ptr/make_shared_object.hpp> 17 #include <boost/date_time/posix_time/posix_time.hpp> 18 #include <boost/log/core.hpp> 19 #include <boost/log/attributes.hpp> 20 #include <boost/log/sources/basic_logger.hpp> 21 #include <boost/log/sources/severity_logger.hpp> 22 #include <boost/log/sources/record_ostream.hpp> 23 #include <boost/log/sinks/sync_frontend.hpp> 24 #include <boost/log/sinks/text_ostream_backend.hpp> 25 #include <boost/log/attributes/scoped_attribute.hpp> 26 #include <boost/log/expressions/formatters/date_time.hpp> 27 #include <boost/log/sinks/text_file_backend.hpp> 28 #include <boost/log/sources/global_logger_storage.hpp> 29 30 31 namespace logging = boost::log; 32 namespace sinks = boost::log::sinks; 33 namespace attrs = boost::log::attributes; 34 namespace src = boost::log::sources; 35 namespace expr = boost::log::expressions; 36 namespace keywords = boost::log::keywords; 37 38 39 enum severity_level 40 { 41 normal, 42 message, 43 alarm, 44 error, 45 fatal 46 }; 47 48 template< typename CharT, typename TraitsT > 49 inline std::basic_ostream< CharT, TraitsT >& operator<< (std::basic_ostream< CharT, TraitsT >& strm, severity_level lvl) 50 { 51 static const char* const str[] = 52 { 53 "normal", 54 "message", 55 "alarm", 56 "error", 57 "fatal" 58 }; 59 if (static_cast< std::size_t >(lvl) < (sizeof(str) / sizeof(*str))) 60 strm << str[lvl]; 61 else 62 strm << static_cast< int >(lvl); 63 return strm; 64 } 65 66 BOOST_LOG_ATTRIBUTE_KEYWORD(severity, "Severity", severity_level) 67 BOOST_LOG_ATTRIBUTE_KEYWORD(timestamp, "TimeStamp", boost::posix_time::ptime) 68 BOOST_LOG_ATTRIBUTE_KEYWORD(line_id, "LineID", unsigned int) 69 BOOST_LOG_ATTRIBUTE_KEYWORD(tag_attr, "Tag", std::string) 70 BOOST_LOG_ATTRIBUTE_KEYWORD(timeline, "Timeline", attrs::timer::value_type) 71 72 73 void init_logging();
实现文件
1 void CHTCollectorDlg::init_logging() 2 { 3 CString strFileName=m_strLogLocation+TEXT("\WLS_%Y-%m-%d_FULL.log"); 4 5 std::locale::global(std::locale("chs")); 6 7 typedef sinks::synchronous_sink< sinks::text_file_backend > text_sink; 8 9 boost::shared_ptr< text_sink > sink = boost::make_shared< text_sink >( keywords::open_mode=std::ios::app, 10 keywords::file_name =strFileName, 11 keywords::rotation_size = 10 *1 * 1024 * 1024, 12 keywords::time_based_rotation = sinks::file::rotation_at_time_point(0, 0, 0) 13 ); 14 sink->set_formatter(expr::stream 15 << std::dec << std::setw(8) << std::setfill('0') << line_id << std::dec << std::setfill(' ') 16 <<" "<<expr::format_date_time< boost::posix_time::ptime >("TimeStamp", "%Y-%m-%d_%H:%M:%S.%f") 17 << " <"<< severity.or_default(normal) 18 << "> "<<expr::if_(expr::has_attr(tag_attr)) 19 [ 20 expr::stream << "[" << tag_attr << "]" 21 ] 22 << expr::if_(expr::has_attr(timeline)) 23 [ 24 expr::stream << "[>"<< timeline << "<]" 25 ] 26 << expr::message); 27 28 sink->locked_backend()->auto_flush(true); 29 30 logging::core::get()->add_sink(sink); 31 32 ////////////////////////////////////////////////////////////////////////// 33 strFileName=m_strLogLocation+TEXT("WLS_%Y-%m-%d_IMPORTANT.log"); 34 sink = boost::make_shared< text_sink >( keywords::open_mode=std::ios::app, 35 keywords::file_name =strFileName, 36 keywords::rotation_size = 10 *1 * 1024 * 1024, 37 keywords::time_based_rotation = sinks::file::rotation_at_time_point(0, 0, 0) 38 ); 39 sink->set_formatter(expr::stream 40 << std::dec << std::setw(8) << std::setfill('0') << line_id << std::dec << std::setfill(' ') 41 <<" "<<expr::format_date_time< boost::posix_time::ptime >("TimeStamp", "%Y-%m-%d_%H:%M:%S.%f") 42 << " <"<< severity.or_default(normal) 43 << "> "<<expr::if_(expr::has_attr(tag_attr)) 44 [ 45 expr::stream << "[" << tag_attr << "]" 46 ] 47 << expr::if_(expr::has_attr(timeline)) 48 [ 49 expr::stream << "[>"<< timeline << "<]" 50 ] 51 << expr::message); 52 53 sink->locked_backend()->auto_flush(true); 54 sink->set_filter(severity>=alarm); 55 logging::core::get()->add_sink(sink); 56 57 logging::add_common_attributes(); 58 }
用法
1 AddRecord(severity_level sl,CString str) 2 { 3 src::wseverity_logger< severity_level > slg; 4 BOOST_LOG_SEV(slg, sl) <<str.GetBuffer(str.GetLength()); 5 }