libmoost
|
00001 /* vim:set ts=3 sw=3 sts=3 et: */ 00028 #ifndef MOOST_LOGGER_HPP 00029 #define MOOST_LOGGER_HPP 00030 00043 #include <string> 00044 #include <stdexcept> 00045 #include <log4cxx/logger.h> 00046 00047 #include <boost/preprocessor/stringize.hpp> 00048 00049 #include "global.hpp" 00050 00060 #ifdef MLOG_PREFIX 00061 #define MLOG_PREFIX__(msg) \ 00062 BOOST_PP_STRINGIZE(MLOG_PREFIX) << " " << msg 00063 #else 00064 #define MLOG_PREFIX__(msg) msg 00065 #endif 00066 00075 #define MLOG_LEVEL_TRACE LOG4CXX_TRACE 00076 #define MLOG_LEVEL_DEBUG LOG4CXX_DEBUG 00077 #define MLOG_LEVEL_INFO LOG4CXX_INFO 00078 #define MLOG_LEVEL_WARN LOG4CXX_WARN 00079 #define MLOG_LEVEL_ERROR LOG4CXX_ERROR 00080 #define MLOG_LEVEL_FATAL LOG4CXX_FATAL 00081 00103 #define MLOG(level, logger, msg) \ 00104 level(logger, MLOG_PREFIX__(msg)); 00105 00113 #define MLOG_TRACE(logger, msg) MLOG(MLOG_LEVEL_TRACE, logger, msg) 00114 #define MLOG_DEBUG(logger, msg) MLOG(MLOG_LEVEL_DEBUG, logger, msg) 00115 #define MLOG_INFO(logger, msg) MLOG(MLOG_LEVEL_INFO, logger, msg) 00116 #define MLOG_WARN(logger, msg) MLOG(MLOG_LEVEL_WARN, logger, msg) 00117 #define MLOG_ERROR(logger, msg) MLOG(MLOG_LEVEL_ERROR, logger, msg) 00118 #define MLOG_FATAL(logger, msg) MLOG(MLOG_LEVEL_FATAL, logger, msg) 00119 00134 #define MLOG_NAMED_LOGGER(name) \ 00135 log4cxx::Logger::getLogger(name) 00136 00137 00150 #define MLOG_DEFAULT_LOGGER() \ 00151 log4cxx::Logger::getRootLogger() 00152 00170 #define MLOG_NAMED_DEFINE(logger, name) \ 00171 log4cxx::LoggerPtr logger = MLOG_NAMED_LOGGER(name) 00172 00189 #define MLOG_NAMED(level, name, msg) \ 00190 MLOG(level, MLOG_NAMED_LOGGER(name), msg) 00191 00199 #define MLOG_NAMED_TRACE(name, msg) MLOG_NAMED(MLOG_LEVEL_TRACE, name, msg) 00200 #define MLOG_NAMED_DEBUG(name, msg) MLOG_NAMED(MLOG_LEVEL_DEBUG, name, msg) 00201 #define MLOG_NAMED_INFO(name, msg) MLOG_NAMED(MLOG_LEVEL_INFO, name, msg) 00202 #define MLOG_NAMED_WARN(name, msg) MLOG_NAMED(MLOG_LEVEL_WARN, name, msg) 00203 #define MLOG_NAMED_ERROR(name, msg) MLOG_NAMED(MLOG_LEVEL_ERROR, name, msg) 00204 #define MLOG_NAMED_FATAL(name, msg) MLOG_NAMED(MLOG_LEVEL_FATAL, name, msg) 00205 00221 #define MLOG_DEFAULT_DEFINE(logger) \ 00222 logger = MLOG_DEFAULT_LOGGER() 00223 00240 #define MLOG_DEFAULT(level, msg) \ 00241 MLOG(level, MLOG_DEFAULT_LOGGER(), msg) 00242 00250 #define MLOG_DEFAULT_TRACE(msg) MLOG_DEFAULT(MLOG_LEVEL_TRACE, msg) 00251 #define MLOG_DEFAULT_DEBUG(msg) MLOG_DEFAULT(MLOG_LEVEL_DEBUG, msg) 00252 #define MLOG_DEFAULT_INFO(msg) MLOG_DEFAULT(MLOG_LEVEL_INFO, msg) 00253 #define MLOG_DEFAULT_WARN(msg) MLOG_DEFAULT(MLOG_LEVEL_WARN, msg) 00254 #define MLOG_DEFAULT_ERROR(msg) MLOG_DEFAULT(MLOG_LEVEL_ERROR, msg) 00255 #define MLOG_DEFAULT_FATAL(msg) MLOG_DEFAULT(MLOG_LEVEL_FATAL, msg) 00256 00278 #define MLOG_ASSERT(cond, logger, msg) \ 00279 if(!(cond)) \ 00280 { \ 00281 LOG4CXX_ASSERT(logger, false, MLOG_PREFIX__(msg)); \ 00282 assert(false && "MLOG_ASSERT assertion failure"); \ 00283 } 00284 00305 #define MLOG_NAMED_ASSERT(cond, name, msg) \ 00306 MLOG_ASSERT(cond, MLOG_NAMED_LOGGER(name), msg) 00307 00326 #define MLOG_DEFAULT_ASSERT(cond, msg) \ 00327 MLOG_ASSERT(cond, MLOG_DEFAULT_LOGGER(), msg) 00328 00352 #define MLOG_TEST(level, cond, logger, msg) \ 00353 if(!(cond)) MLOG(level, logger, msg); 00354 00377 #define MLOG_NAMED_TEST(level, cond, name, msg) \ 00378 MLOG(level, cond, MLOG_NAMED_LOGGER(name), msg) 00379 00400 #define MLOG_DEFAULT_TEST(level, cond, msg) \ 00401 MLOG(level, cond, MLOG_DEFAULT_LOGGER(), msg) 00402 00410 #define MLOG_TEST_TRACE(cond, logger, msg) MLOG_TEST(MLOG_LEVEL_TRACE, cond, logger, msg) 00411 #define MLOG_TEST_DEBUG(cond, logger, msg) MLOG_TEST(MLOG_LEVEL_DEBUG, cond, logger, msg) 00412 #define MLOG_TEST_INFO(cond, logger, msg) MLOG_TEST(MLOG_LEVEL_INFO, cond, logger, msg) 00413 #define MLOG_TEST_WARN(cond, logger, msg) MLOG_TEST(MLOG_LEVEL_WARN, cond, logger, msg) 00414 #define MLOG_TEST_ERROR(cond, logger, msg) MLOG_TEST(MLOG_LEVEL_ERROR, cond, logger, msg) 00415 #define MLOG_TEST_FATAL(cond, logger, msg) MLOG_TEST(MLOG_LEVEL_FATAL, cond, logger, msg) 00416 00424 #define MLOG_NAMED_TEST_TRACE(cond, name, msg) MLOG_DEFAULT_TEST(MLOG_LEVEL_TRACE, cond, name, msg) 00425 #define MLOG_NAMED_TEST_DEBUG(cond, name, msg) MLOG_DEFAULT_TEST(MLOG_LEVEL_DEBUG, cond, name, msg) 00426 #define MLOG_NAMED_TEST_INFO(cond, name, msg) MLOG_DEFAULT_TEST(MLOG_LEVEL_INFO, cond, name, msg) 00427 #define MLOG_NAMED_TEST_WARN(cond, name, msg) MLOG_DEFAULT_TEST(MLOG_LEVEL_WARN, cond, name, msg) 00428 #define MLOG_NAMED_TEST_ERROR(cond, name, msg) MLOG_DEFAULT_TEST(MLOG_LEVEL_ERROR, cond, name, msg) 00429 #define MLOG_NAMED_TEST_FATAL(cond, name, msg) MLOG_DEFAULT_TEST(MLOG_LEVEL_FATAL, cond, name, msg) 00430 00438 #define MLOG_DEFAULT_TEST_TRACE(cond, msg) MLOG_DEFAULT_TEST(MLOG_LEVEL_TRACE, cond, msg) 00439 #define MLOG_DEFAULT_TEST_DEBUG(cond, msg) MLOG_DEFAULT_TEST(MLOG_LEVEL_DEBUG, cond, msg) 00440 #define MLOG_DEFAULT_TEST_INFO(cond, msg) MLOG_DEFAULT_TEST(MLOG_LEVEL_INFO, cond, msg) 00441 #define MLOG_DEFAULT_TEST_WARN(cond, msg) MLOG_DEFAULT_TEST(MLOG_LEVEL_WARN, cond, msg) 00442 #define MLOG_DEFAULT_TEST_ERROR(cond, msg) MLOG_DEFAULT_TEST(MLOG_LEVEL_ERROR, cond, msg) 00443 #define MLOG_DEFAULT_TEST_FATAL(cond, msg) MLOG_DEFAULT_TEST(MLOG_LEVEL_FATAL, cond, msg) 00444 00466 #define MLOG_CHECK(cond, logger, msg) \ 00467 MLOG_TEST_ERROR(cond, logger, msg) 00468 00489 #define MLOG_NAMED_CHECK(cond, name, msg) \ 00490 MLOG_CHECK(cond, MLOG_NAMED_LOGGER(name), msg) 00491 00510 #define MLOG_DEFAULT_CHECK(cond, msg) \ 00511 MLOG_CHECK(cond, MLOG_DEFAULT_LOGGER(), msg) 00512 00534 #define MLOG_THROW(cond, logger, msg)\ 00535 if(!(cond)) \ 00536 { \ 00537 MLOG_CHECK(false, logger, msg); \ 00538 std::stringstream oss; \ 00539 oss << msg; \ 00540 throw std::runtime_error(oss.str()); \ 00541 } 00542 00559 #define MLOG_THROW_IF(cond, logger, msg) \ 00560 do { \ 00561 std::ostringstream oss; \ 00562 oss << msg; \ 00563 const std::string& err = oss.str(); \ 00564 if (cond) \ 00565 throw std::runtime_error(err); \ 00566 else \ 00567 MLOG_ERROR(logger, err); \ 00568 } while (0) 00569 00590 #define MLOG_NAMED_THROW(cond, name, msg) \ 00591 MLOG_THROW(cond, MLOG_NAMED_LOGGER(name), msg) 00592 00609 #define MLOG_NAMED_THROW_IF(cond, name, msg) \ 00610 MLOG_THROW_IF(cond, MLOG_NAMED_LOGGER(name), msg) 00611 00630 #define MLOG_DEFAULT_THROW(cond, msg) \ 00631 MLOG_THROW(cond, MLOG_DEFAULT_LOGGER(), msg) 00632 00647 #define MLOG_DEFAULT_THROW_IF(cond, msg) \ 00648 MLOG_THROW_IF(cond, MLOG_DEFAULT_LOGGER(), msg) 00649 00672 #define MLOG_VERIFY(cond, logger, msg) \ 00673 if(!(cond)) \ 00674 { \ 00675 MLOG_ASSERT(false, logger, msg); \ 00676 throw std::runtime_error(msg); \ 00677 } 00678 00700 #define MLOG_NAMED_VERIFY(cond, name, msg) \ 00701 MLOG_VERIFY(cond, MLOG_NAMED_LOGGER(name), msg) 00702 00722 #define MLOG_DEFAULT_VERIFY(cond, msg) \ 00723 MLOG_VERIFY(cond, MLOG_DEFAULT_LOGGER(), msg) 00724 00733 #define MLOG_GET_LEVEL_ALL log4cxx::Level::getAll() 00734 #define MLOG_GET_LEVEL_OFF log4cxx::Level::getOff() 00735 #define MLOG_GET_LEVEL_TRACE log4cxx::Level::getTrace() 00736 #define MLOG_GET_LEVEL_DEBUG log4cxx::Level::getDebug() 00737 #define MLOG_GET_LEVEL_INFO log4cxx::Level::getInfo() 00738 #define MLOG_GET_LEVEL_WARN log4cxx::Level::getWarn() 00739 #define MLOG_GET_LEVEL_ERROR log4cxx::Level::getError() 00740 #define MLOG_GET_LEVEL_FATAL log4cxx::Level::getFatal() 00741 00751 #define MLOG_SET_LEVEL(level, logger) \ 00752 logger->setLevel(level); 00753 00763 #define MLOG_SET_NAMED_LEVEL(level, name) \ 00764 MLOG_SET_LEVEL(level, MLOG_NAMED_LOGGER(name)) 00765 00775 #define MLOG_SET_DEFAULT_LEVEL(level) \ 00776 MLOG_SET_LEVEL(level, MLOG_DEFAULT_LOGGER()) 00777 00785 #define MLOG_SET_LEVEL_ALL(logger) MLOG_SET_LEVEL(MLOG_GET_LEVEL_ALL, logger) 00786 #define MLOG_SET_LEVEL_OFF(logger) MLOG_SET_LEVEL(MLOG_GET_LEVEL_OFF, logger) 00787 #define MLOG_SET_LEVEL_TRACE(logger) MLOG_SET_LEVEL(MLOG_GET_LEVEL_TRACE, logger) 00788 #define MLOG_SET_LEVEL_DEBUG(logger) MLOG_SET_LEVEL(MLOG_GET_LEVEL_DEBUG, logger) 00789 #define MLOG_SET_LEVEL_INFO(logger) MLOG_SET_LEVEL(MLOG_GET_LEVEL_INFO, logger) 00790 #define MLOG_SET_LEVEL_WARN(logger) MLOG_SET_LEVEL(MLOG_GET_LEVEL_WARN, logger) 00791 #define MLOG_SET_LEVEL_ERROR(logger) MLOG_SET_LEVEL(MLOG_GET_LEVEL_ERROR, logger) 00792 #define MLOG_SET_LEVEL_FATAL(logger) MLOG_SET_LEVEL(MLOG_GET_LEVEL_FATAL, logger) 00793 00801 #define MLOG_SET_NAMED_LEVEL_ALL(name) MLOG_SET_LEVEL(MLOG_GET_LEVEL_ALL, MLOG_NAMED_LOGGER(name)) 00802 #define MLOG_SET_NAMED_LEVEL_OFF(name) MLOG_SET_LEVEL(MLOG_GET_LEVEL_OFF, MLOG_NAMED_LOGGER(name)) 00803 #define MLOG_SET_NAMED_LEVEL_TRACE(name) MLOG_SET_LEVEL(MLOG_GET_LEVEL_TRACE, MLOG_NAMED_LOGGER(name)) 00804 #define MLOG_SET_NAMED_LEVEL_DEBUG(name) MLOG_SET_LEVEL(MLOG_GET_LEVEL_DEBUG, MLOG_NAMED_LOGGER(name)) 00805 #define MLOG_SET_NAMED_LEVEL_INFO(name) MLOG_SET_LEVEL(MLOG_GET_LEVEL_INFO, MLOG_NAMED_LOGGER(name)) 00806 #define MLOG_SET_NAMED_LEVEL_WARN(name) MLOG_SET_LEVEL(MLOG_GET_LEVEL_WARN, MLOG_NAMED_LOGGER(name)) 00807 #define MLOG_SET_NAMED_LEVEL_ERROR(name) MLOG_SET_LEVEL(MLOG_GET_LEVEL_ERROR, MLOG_NAMED_LOGGER(name)) 00808 #define MLOG_SET_NAMED_LEVEL_FATAL(name) MLOG_SET_LEVEL(MLOG_GET_LEVEL_FATAL, MLOG_NAMED_LOGGER(name)) 00809 00817 #define MLOG_SET_DEFAULT_LEVEL_ALL() MLOG_SET_LEVEL(MLOG_GET_LEVEL_ALL, MLOG_DEFAULT_LOGGER()) 00818 #define MLOG_SET_DEFAULT_LEVEL_OFF() MLOG_SET_LEVEL(MLOG_GET_LEVEL_OFF, MLOG_DEFAULT_LOGGER()) 00819 #define MLOG_SET_DEFAULT_LEVEL_TRACE() MLOG_SET_LEVEL(MLOG_GET_LEVEL_TRACE, MLOG_DEFAULT_LOGGER()) 00820 #define MLOG_SET_DEFAULT_LEVEL_DEBUG() MLOG_SET_LEVEL(MLOG_GET_LEVEL_DEBUG, MLOG_DEFAULT_LOGGER()) 00821 #define MLOG_SET_DEFAULT_LEVEL_INFO() MLOG_SET_LEVEL(MLOG_GET_LEVEL_INFO, MLOG_DEFAULT_LOGGER()) 00822 #define MLOG_SET_DEFAULT_LEVEL_WARN() MLOG_SET_LEVEL(MLOG_GET_LEVEL_WARN, MLOG_DEFAULT_LOGGER()) 00823 #define MLOG_SET_DEFAULT_LEVEL_ERROR() MLOG_SET_LEVEL(MLOG_GET_LEVEL_ERROR, MLOG_DEFAULT_LOGGER()) 00824 #define MLOG_SET_DEFAULT_LEVEL_FATAL() MLOG_SET_LEVEL(MLOG_GET_LEVEL_FATAL, MLOG_DEFAULT_LOGGER()) 00825 00834 #define MLOG_GET_LEVELSTR_ALL "all" 00835 #define MLOG_GET_LEVELSTR_OFF "off" 00836 #define MLOG_GET_LEVELSTR_TRACE "trace" 00837 #define MLOG_GET_LEVELSTR_DEBUG "debug" 00838 #define MLOG_GET_LEVELSTR_INFO "info" 00839 #define MLOG_GET_LEVELSTR_WARN "warn" 00840 #define MLOG_GET_LEVELSTR_ERROR "error" 00841 #define MLOG_GET_LEVELSTR_FATAL "fatal" 00842 00851 namespace moost { namespace logging { 00852 00853 inline 00854 log4cxx::LevelPtr str2level(std::string const level) 00855 { 00856 log4cxx::LevelPtr invalid(new log4cxx::Level(-1, LOG4CXX_STR("INVALID"), 7 )); 00857 log4cxx::LevelPtr new_level = log4cxx::Level::toLevel(level, invalid); 00858 00859 if (new_level == invalid) 00860 { 00861 // [29/3/2011 ricky] we really don't want this to be ignored so after much soul 00862 // searching I decided this was the best way to handle an invalid level request 00863 throw std::runtime_error("invalid level string"); 00864 } 00865 00866 return new_level; 00867 } 00868 00869 }} 00870 00880 #define MLOG_SET_LEVELSTR(levelstr, logger) \ 00881 MLOG_SET_LEVEL(moost::logging::str2level(levelstr), logger); 00882 00892 #define MLOG_SET_NAMED_LEVELSTR(levelstr, name) \ 00893 MLOG_SET_LEVELSTR(levelstr, MLOG_NAMED_LOGGER(name)) 00894 00902 #define MLOG_SET_DEFAULT_LEVELSTR(levelstr) \ 00903 MLOG_SET_LEVELSTR(levelstr, MLOG_DEFAULT_LOGGER()) 00904 00905 #endif