• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *          Copyright Andrey Semashev 2007 - 2015.
3  * Distributed under the Boost Software License, Version 1.0.
4  *    (See accompanying file LICENSE_1_0.txt or copy at
5  *          http://www.boost.org/LICENSE_1_0.txt)
6  */
7 
8 #include <string>
9 #include <fstream>
10 #include <iostream>
11 #include <boost/smart_ptr/shared_ptr.hpp>
12 #include <boost/core/null_deleter.hpp>
13 #include <boost/log/core.hpp>
14 #include <boost/log/expressions.hpp>
15 #include <boost/log/sinks/sync_frontend.hpp>
16 #include <boost/log/sinks/text_ostream_backend.hpp>
17 #include <boost/log/sources/severity_channel_logger.hpp>
18 #include <boost/log/sources/record_ostream.hpp>
19 
20 namespace logging = boost::log;
21 namespace src = boost::log::sources;
22 namespace expr = boost::log::expressions;
23 namespace sinks = boost::log::sinks;
24 namespace keywords = boost::log::keywords;
25 
26 //[ example_sinks_sync
27 enum severity_level
28 {
29     normal,
30     warning,
31     error
32 };
33 
34 // Complete sink type
35 typedef sinks::synchronous_sink< sinks::text_ostream_backend > sink_t;
36 
init_logging()37 void init_logging()
38 {
39     boost::shared_ptr< logging::core > core = logging::core::get();
40 
41     // Create a backend and initialize it with a stream
42     boost::shared_ptr< sinks::text_ostream_backend > backend =
43         boost::make_shared< sinks::text_ostream_backend >();
44     backend->add_stream(
45         boost::shared_ptr< std::ostream >(&std::clog, boost::null_deleter()));
46 
47     // Wrap it into the frontend and register in the core
48     boost::shared_ptr< sink_t > sink(new sink_t(backend));
49     core->add_sink(sink);
50 
51     // You can manage filtering and formatting through the sink interface
52     sink->set_filter(expr::attr< severity_level >("Severity") >= warning);
53     sink->set_formatter
54     (
55         expr::stream
56             << "Level: " << expr::attr< severity_level >("Severity")
57             << " Message: " << expr::smessage
58     );
59 
60     // You can also manage backend in a thread-safe manner
61     {
62         sink_t::locked_backend_ptr p = sink->locked_backend();
63         p->add_stream(boost::make_shared< std::ofstream >("sample.log"));
64     } // the backend gets released here
65 }
66 //]
67 
main(int,char * [])68 int main(int, char*[])
69 {
70     init_logging();
71 
72     src::severity_channel_logger< severity_level > lg(keywords::channel = "net");
73     BOOST_LOG_SEV(lg, warning) << "Hello world!";
74 
75     return 0;
76 }
77