现在,随着程序增大,我们不愿意再一个个看输出,我们将日志输出到文件。一旦执行了这个功能,控制台输出将被覆盖掉。
#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 SetFilter() { logging::core::get()->set_filter(logging::trivial::severity >= logging::trivial::info); }int main () { cout << "hello, world" << endl; logging::add_file_log("sample.log"); SetFilter(); 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"; }
这是日志库常用的概念。
左边是source,负责收集数据。比如LOG_DEBUG<<"...."
中间是core,负责链接source和sink
sink负责处理数据,也就是如何把数据写到目的地appender
最后面应该是appender的概念,比如向网络输出什么的,boost log似乎没有提供这样的功能,向网络输出感觉似乎有点多余,因为并不可靠。
代表console的sink在我们执行logging::add_file_log("sample.log")之后,被文件sink取代,所以控制台不输出。
这意味着,往core里添加多个sinks是显然可以提供的功能。