#include <boost/logging/format/named_write.hpp> typedef boost::logging::named_logger<>::type logger_type; #define L_(lvl) BOOST_LOG_USE_LOG_IF_LEVEL(g_l(), g_log_level(), lvl ) BOOST_DEFINE_LOG_FILTER(g_log_level, boost::logging::level::holder ) // holds the application log level BOOST_DEFINE_LOG(g_l, logger_type) void test_mul_levels_one_logger() { // formatting : time [idx] message \n // destinations : console, file "out.txt" and debug window g_l()->writer().write("%time%($hh:$mm.$ss.$mili) [%idx%] |\n", "cout file(out.txt) debug"); g_l()->mark_as_initialized(); int i = 1; L_(debug) << "this is so cool " << i++; L_(error) << "first error " << i++; std::string hello = "hello", world = "world"; L_(debug) << hello << ", " << world; using namespace boost::logging; g_log_level()->set_enabled(level::error); L_(debug) << "this will not be written anywhere"; L_(info) << "this won't be written anywhere either"; L_(error) << "second error " << i++; g_log_level()->set_enabled(level::info); L_(info) << "good to be back ;) " << i++; L_(error) << "third error " << i++; } int main() { test_mul_levels_one_logger(); } // End of file
#include <boost/logging/format_fwd.hpp> #include <boost/logging/format/named_write.hpp> typedef boost::logging::named_logger<>::type logger_type; #define L_ BOOST_LOG_USE_LOG_IF_FILTER(g_l(), g_log_filter()->is_enabled() ) // Define the filters and loggers you'll use (usually in a source file) BOOST_DEFINE_LOG_FILTER(g_log_filter, boost::logging::filter::no_ts ) BOOST_DEFINE_LOG(g_l, logger_type) void one_logger_one_filter_example() { // formatting : [idx] message \n // destinations : console, file "out.txt" and debug window g_l()->writer().write("[%idx%] |\n", "cout file(out.txt) debug"); g_l()->mark_as_initialized(); int i = 1; L_ << "this is so cool " << i++; L_ << "this is so cool again " << i++; std::string hello = "hello", world = "world"; L_ << hello << ", " << world; g_log_filter()->set_enabled(false); L_ << "this will not be written to the log"; L_ << "this won't be written to the log"; g_log_filter()->set_enabled(true); L_ << "good to be back ;) " << i++; } int main() { one_logger_one_filter_example(); } // End of file
#define BOOST_LOG_COMPILE_FAST_OFF #include <boost/logging/logging.hpp> #include <boost/logging/format.hpp> using namespace boost::logging; struct no_gather { typedef const char* msg_type ; const char * m_msg; no_gather() : m_msg(0) {} const char * msg() const { return m_msg; } void *out(const char* msg) { m_msg = msg; return this; } void *out(const std::string& msg) { m_msg = msg.c_str(); return this; } }; typedef logger< no_gather, destination::cout > app_log_type; typedef logger< no_gather, destination::file > err_log_type; BOOST_DEFINE_LOG_FILTER(g_log_filter, filter::no_ts ) BOOST_DEFINE_LOG(g_log_app, app_log_type) BOOST_DEFINE_LOG_WITH_ARGS( g_log_err, err_log_type, ("err.txt") ) #define LAPP_ BOOST_LOG_USE_SIMPLE_LOG_IF_FILTER(g_log_app(), g_log_filter()->is_enabled() ) #define LERR_ BOOST_LOG_USE_SIMPLE_LOG_IF_FILTER(g_log_err(), g_log_filter()->is_enabled() ) void fastest_no_ostr_like_example() { g_log_app()->mark_as_initialized(); g_log_err()->mark_as_initialized(); LAPP_("this is so cool\n"); LERR_("first error \n"); std::string hello = "hello", world = "world"; LAPP_(hello + ", " + world + "\n"); g_log_filter()->set_enabled(false); LAPP_("this will not be written to the log"); LAPP_("this won't be written to the log"); LERR_("this error is not logged "); g_log_filter()->set_enabled(true); LAPP_("good to be back ;) \n" ); LERR_("second error \n" ); } int main() { fastest_no_ostr_like_example(); } // End of file
#include <boost/logging/format_fwd.hpp> BOOST_LOG_FORMAT_MSG( optimize::cache_string_one_str<> ) #include <boost/logging/format_ts.hpp> #include <boost/thread/xtime.hpp> using namespace boost::logging; using namespace boost::logging::scenario::usage; typedef use< // the filter is always accurate (but slow) filter_::change::always_accurate, // filter does not use levels filter_::level::no_levels, // the logger is initialized once, when only one thread is running logger_::change::set_once_when_one_thread, // the logger favors speed (on a dedicated thread) logger_::favor::speed> finder; BOOST_DECLARE_LOG_FILTER(g_log_filter, finder::filter ) BOOST_DECLARE_LOG(g_log_err, finder::logger ) BOOST_DECLARE_LOG(g_log_app, finder::logger ) BOOST_DECLARE_LOG(g_log_dbg, finder::logger ) #define LDBG_ BOOST_LOG_USE_LOG_IF_FILTER(g_log_dbg(), g_log_filter()->is_enabled() ) #define LERR_ BOOST_LOG_USE_LOG_IF_FILTER(g_log_err(), g_log_filter()->is_enabled() ) #define LAPP_ BOOST_LOG_USE_LOG_IF_FILTER(g_log_app(), g_log_filter()->is_enabled() ) BOOST_DEFINE_LOG_FILTER(g_log_filter, finder::filter ) BOOST_DEFINE_LOG(g_log_err, finder::logger ) BOOST_DEFINE_LOG(g_log_app, finder::logger ) BOOST_DEFINE_LOG(g_log_dbg, finder::logger ) void do_sleep(int ms) { using namespace boost; xtime next; xtime_get( &next, TIME_UTC); next.nsec += (ms % 1000) * 1000000; int nano_per_sec = 1000000000; next.sec += next.nsec / nano_per_sec; next.sec += ms / 1000; next.nsec %= nano_per_sec; thread::sleep( next); } void your_scenario_example() { // add formatters and destinations // That is, how the message is to be formatted and where should it be written to // Err log g_log_err()->writer().add_formatter( formatter::idx(), "[%] " ); g_log_err()->writer().add_formatter( formatter::time("$hh:$mm.$ss ") ); g_log_err()->writer().add_formatter( formatter::append_newline() ); g_log_err()->writer().add_destination( destination::file("err.txt") ); // App log g_log_app()->writer().add_formatter( formatter::time("$hh:$mm.$ss ") ); g_log_app()->writer().add_formatter( formatter::append_newline() ); g_log_app()->writer().add_destination( destination::file("out.txt") ); g_log_app()->writer().add_destination( destination::cout() ); // Debug log g_log_dbg()->writer().add_formatter( formatter::time("$hh:$mm.$ss ") ); g_log_dbg()->writer().add_formatter( formatter::append_newline() ); g_log_dbg()->writer().add_destination( destination::dbg_window() ); g_log_dbg()->writer().add_destination( destination::cout() ); g_log_app()->mark_as_initialized(); g_log_err()->mark_as_initialized(); g_log_dbg()->mark_as_initialized(); int i = 1; LDBG_ << "this is so cool " << i++; LDBG_ << "this is so cool again " << i++; LERR_ << "first error " << i++; std::string hello = "hello", world = "world"; LAPP_ << hello << ", " << world; g_log_filter()->set_enabled(false); LDBG_ << "this will not be written anywhere"; LAPP_ << "this won't be written anywhere either"; LERR_ << "this error is not logged " << i++; g_log_filter()->set_enabled(true); LAPP_ << "good to be back ;) " << i++; LERR_ << "second error " << i++; // just so that we can see the output to the console as well (the messages are written no a different thread)... do_sleep(1000); } int main() { your_scenario_example(); } // End of file
#include <boost/logging/format_fwd.hpp> BOOST_LOG_FORMAT_MSG( optimize::cache_string_one_str<> ) #include <boost/logging/format.hpp> using namespace boost::logging; typedef logger_format_write< > logger_type; BOOST_DECLARE_LOG_FILTER(g_log_filter, filter::no_ts ) BOOST_DECLARE_LOG(g_log_err, logger_type) BOOST_DECLARE_LOG(g_log_app, logger_type) BOOST_DECLARE_LOG(g_log_dbg, logger_type) #define LDBG_ BOOST_LOG_USE_LOG_IF_FILTER(g_log_dbg(), g_log_filter()->is_enabled() ) << "[dbg] " #define LERR_ BOOST_LOG_USE_LOG_IF_FILTER(g_log_err(), g_log_filter()->is_enabled() ) #define LAPP_ BOOST_LOG_USE_LOG_IF_FILTER(g_log_app(), g_log_filter()->is_enabled() ) << "[app] " BOOST_DEFINE_LOG_FILTER(g_log_filter, filter::no_ts ) BOOST_DEFINE_LOG(g_log_err, logger_type) BOOST_DEFINE_LOG(g_log_app, logger_type) BOOST_DEFINE_LOG(g_log_dbg, logger_type) void mul_logger_one_filter_example() { // Err log g_log_err()->writer().add_formatter( formatter::idx(), "[%] " ); g_log_err()->writer().add_formatter( formatter::time("$hh:$mm.$ss ") ); g_log_err()->writer().add_formatter( formatter::append_newline() ); g_log_err()->writer().add_destination( destination::file("err.txt") ); // App log g_log_app()->writer().add_formatter( formatter::time("$hh:$mm.$ss ") ); g_log_app()->writer().add_formatter( formatter::append_newline() ); g_log_app()->writer().add_destination( destination::file("out.txt") ); g_log_app()->writer().add_destination( destination::cout() ); // Debug log g_log_dbg()->writer().add_formatter( formatter::time("$hh:$mm.$ss ") ); g_log_dbg()->writer().add_formatter( formatter::append_newline() ); g_log_dbg()->writer().add_destination( destination::dbg_window() ); g_log_dbg()->writer().add_destination( destination::cout() ); g_log_app()->mark_as_initialized(); g_log_err()->mark_as_initialized(); g_log_dbg()->mark_as_initialized(); int i = 1; LDBG_ << "this is so cool " << i++; LDBG_ << "this is so cool again " << i++; LERR_ << "first error " << i++; std::string hello = "hello", world = "world"; LAPP_ << hello << ", " << world; g_log_filter()->set_enabled(false); LDBG_ << "this will not be written anywhere"; LAPP_ << "this won't be written anywhere either"; LERR_ << "this error is not logged " << i++; g_log_filter()->set_enabled(true); LAPP_ << "good to be back ;) " << i++; LERR_ << "second error " << i++; } int main() { mul_logger_one_filter_example(); } // End of file