#include #include #include #include #include namespace logging = boost::log; namespace keywords = boost::log::keywords; namespace expr = boost::log::expressions; namespace my { enum severity { trace, info, warning, error }; } // Unclear as to this line's intended benefit, but it makes code shorter too. BOOST_LOG_ATTRIBUTE_KEYWORD(severity, "Severity", my::severity); template void output_severity_to (Stream& output, const my::severity& level) { switch (level) { case my::severity::error: output << "ERROR"; break; case my::severity::warning: output << "WARNING"; break; case my::severity::info: output << "INFO"; break; case my::severity::trace: output << "TRACE"; break; default: output << "???"; break; } } // Handle regular stream output. std::ostream& operator<< (std::ostream& output, const my::severity& level) { output_severity_to(output, level); return output; } // Special output handling for log logging::formatting_ostream& operator<< (logging::formatting_ostream& output, const logging::to_log_manip& level) { output_severity_to(output, level.get()); return output; } int main () { logging::register_simple_formatter_factory("Severity"); logging::add_console_log ( std::cout, keywords::format = expr::stream << severity << ": " << expr::smessage ); logging::sources::severity_logger_mt logger; BOOST_LOG_SEV(logger, my::info) << "Booo!"; return -1; }