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()37void 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 * [])68int 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