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
上一篇: ffmpeg使用例子
下一篇: boost库使用总结