boost log库使用三
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.****.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
现在,我要将日志写到本地文件中。我的例子代码比官方文档简单点。
#include <iostream>#include <boost/log/core.hpp>#include <boost/log/trivial.hpp>#include <boost/log/expressions.hpp>#include <boost/log/utility/setup/file.hpp>namespace logging = boost::log;using namespace std;void SetFilter1() { logging::core::get()->set_filter(logging::trivial::severity >= logging::trivial::info);}void SetFilter2() { logging::core::get()->set_filter(logging::trivial::severity >= logging::trivial::debug);}int main () { cout << "hello, world" << endl; logging::add_file_log("sample.log"); SetFilter1(); 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"; BOOST_LOG_TRIVIAL(info) << "--------------------" << endl; SetFilter2(); 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";}
不要忘记包含头文件
<boost/log/utility/setup/file.hpp>
,否则你会遇到编译错误:
no member named 'add_file_log' in namespace 'boost::log'
现在运行程序,可以看到当前目录下有了sample.log文件。内容如下:
$ cat sample.logAn informational severity messageA warning severity messageAn error severity messageA fatal severity message--------------------A debug severity messageAn informational severity messageA warning severity messageAn error severity messageA fatal severity messag
现在我们遇到了sink的概念。sink决定日志信息输出到什么地方。在前面两篇文章中,我没有添加sink。boost log使用console作为默认的sink. 现在,因为我调用了add_file_log函数,因此默认的sink被file sink取代。要设置sink, 需要将其添加到core中,上面的例子只用了一行代码:
logging::add_file_log("sample.log");
boost log还有一个概念叫做source。这个文档描述了boost log设计的架构。
左边是 log source, 负责从程序中收集日志信息,就像这样的语句:
BOOST_LOG_TRIVIAL(trace) << "A trace severity message";
右边是sink, 负责处理日志信息,决定日志输出到哪里,怎么使用。
中间的logging core将它们连接在一起。