欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

boost log库使用四

程序员文章站 2022-05-31 21:46:23
...
               

现在,将boost log应用到一个已经存在的C++程序中用来替代CppCMS log。我用它完成一些任务,单个日志文件尺寸小于10M,磁盘剩余空间最小要保持3G。

要达到这个目的,有些事情需要注意:

1. 包含正确的头文件:

#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;

2. 必须注册格式,否则你看不到severity字段

void InitLog() {  boost::log::register_simple_formatter_factory< boost::log::trivial::severity_level, char >("Severity");  logging::add_file_log(   keywords::file_name = AppHolder::Instance().config().log_folder + "/sign_%Y-%m-%d_%H-%M-%S.%N.log",   keywords::rotation_size = 10 * 1024 * 1024,   keywords::time_based_rotation = sinks::file::rotation_at_time_point(0, 0, 0),   keywords::format = "[%TimeStamp%] (%Severity%) : %Message%",   keywords::min_free_space=3 * 1024 * 1024   );  logging::core::get()->set_filter(logging::trivial::severity >= logging::trivial::debug);}

3. 在main函数中, 调用InitLog之后,要设置属性

InitLog();    logging::add_common_attributes();    using namespace logging::trivial;    src::severity_logger< severity_level > lg;    BOOST_LOG_SEV(lg, info) << "thread id: " << this_thread::get_id() << " Initialization succeeded";
现在,看一下日志文件,每个文件尺寸都在10M以下,零点时分会产生新的日志文件

 -rw-r--r-- 1 root root  10M Dec  3 23:16 sign_2013-12-03_23-00-01.0.log-rw-r--r-- 1 root root  10M Dec  3 23:36 sign_2013-12-03_23-16-55.1.log-rw-r--r-- 1 root root  10M Dec  3 23:55 sign_2013-12-03_23-36-21.2.log-rw-r--r-- 1 root root 2.4M Dec  4 00:00 sign_2013-12-03_23-55-33.3.log-rw-r--r-- 1 root root  10M Dec  4 00:19 sign_2013-12-04_00-00-00.4.log-rw-r--r-- 1 root root  10M Dec  4 00:38 sign_2013-12-04_00-19-30.5.log-rw-r--r-- 1 root root  10M Dec  4 00:58 sign_2013-12-04_00-38-48.6.log-rw-r--r-- 1 root root  10M Dec  4 01:17 sign_2013-12-04_00-58-06.7.log-rw-r--r-- 1 root root  10M Dec  4 01:36 sign_2013-12-04_01-17-19.8.log-rw-r--r-- 1 root root  10M Dec  4 01:56 sign_2013-12-04_01-36-45.9.log-rw-r--r-- 1 root root  10M Dec  4 02:15 sign_2013-12-04_01-56-07.10.log

看其中一个日志文件

[2013-Dec-04 10:17:45.728393] (debug) : object id: 529df217186f983f62ffa718 sent data: 01 30 30 30 43 44 31 4F 4B 31 30 03  sent size:12


4. 在其他.cc文件中,只需要include一个头文件

 #include <boost/log/trivial.hpp>
并使用宏 BOOST_LOG_TRIVIAL()

BOOST_LOG_TRIVIAL(debug) << "object id: " << id_ << " sent data: " << PrintBytesAsHexString(*data, data->size()) << " sent size:" << data->size();

现在可以了。

boost log内部有很多细节要学习。暂时没有时间分析它。将来有空会写相关博客。


           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow