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 <boost/config.hpp> 9 #if !defined(BOOST_WINDOWS) 10 #define BOOST_LOG_USE_NATIVE_SYSLOG 11 #endif 12 13 #include <string> 14 #include <boost/smart_ptr/shared_ptr.hpp> 15 #include <boost/smart_ptr/make_shared_object.hpp> 16 #include <boost/log/core.hpp> 17 #include <boost/log/sinks/sync_frontend.hpp> 18 #include <boost/log/sinks/syslog_backend.hpp> 19 #include <boost/log/sources/severity_logger.hpp> 20 #include <boost/log/sources/record_ostream.hpp> 21 #include <boost/log/attributes/scoped_attribute.hpp> 22 23 namespace logging = boost::log; 24 namespace src = boost::log::sources; 25 namespace sinks = boost::log::sinks; 26 namespace keywords = boost::log::keywords; 27 28 //[ example_sinks_syslog 29 // Complete sink type 30 typedef sinks::synchronous_sink< sinks::syslog_backend > sink_t; 31 32 //<- 33 #if defined(BOOST_LOG_USE_NATIVE_SYSLOG) 34 //-> init_native_syslog()35void init_native_syslog() 36 { 37 boost::shared_ptr< logging::core > core = logging::core::get(); 38 39 // Create a backend 40 boost::shared_ptr< sinks::syslog_backend > backend(new sinks::syslog_backend( 41 keywords::facility = sinks::syslog::user, /*< the logging facility >*/ 42 keywords::use_impl = sinks::syslog::native /*< the native syslog API should be used >*/ 43 )); 44 45 // Set the straightforward level translator for the "Severity" attribute of type int 46 backend->set_severity_mapper(sinks::syslog::direct_severity_mapping< int >("Severity")); 47 48 // Wrap it into the frontend and register in the core. 49 // The backend requires synchronization in the frontend. 50 core->add_sink(boost::make_shared< sink_t >(backend)); 51 } 52 //<- 53 #endif 54 //-> 55 56 //<- 57 #if !defined(BOOST_LOG_NO_ASIO) 58 //-> init_builtin_syslog()59void init_builtin_syslog() 60 { 61 boost::shared_ptr< logging::core > core = logging::core::get(); 62 63 // Create a new backend 64 boost::shared_ptr< sinks::syslog_backend > backend(new sinks::syslog_backend( 65 keywords::facility = sinks::syslog::local0, /*< the logging facility >*/ 66 keywords::use_impl = sinks::syslog::udp_socket_based /*< the built-in socket-based implementation should be used >*/ 67 )); 68 69 // Setup the target address and port to send syslog messages to 70 backend->set_target_address("192.164.1.10", 514); 71 72 // Create and fill in another level translator for "MyLevel" attribute of type string 73 sinks::syslog::custom_severity_mapping< std::string > mapping("MyLevel"); 74 mapping["debug"] = sinks::syslog::debug; 75 mapping["normal"] = sinks::syslog::info; 76 mapping["warning"] = sinks::syslog::warning; 77 mapping["failure"] = sinks::syslog::critical; 78 backend->set_severity_mapper(mapping); 79 80 // Wrap it into the frontend and register in the core. 81 core->add_sink(boost::make_shared< sink_t >(backend)); 82 } 83 //<- 84 #endif 85 //-> 86 //] 87 main(int,char * [])88int main(int, char*[]) 89 { 90 #if defined(BOOST_LOG_USE_NATIVE_SYSLOG) 91 init_native_syslog(); 92 #elif !defined(BOOST_LOG_NO_ASIO) 93 init_builtin_syslog(); 94 #endif 95 96 BOOST_LOG_SCOPED_THREAD_TAG("MyLevel", "warning"); 97 src::severity_logger< > lg; 98 BOOST_LOG_SEV(lg, 3) << "Hello world!"; 99 100 return 0; 101 } 102