32 #ifndef LSST_LOG_LOG_H
33 #define LSST_LOG_LOG_H
44 #include <log4cxx/logger.h>
45 #include <boost/format.hpp>
53 #define LOG_CONFIG(filename) lsst::log::Log::configure(filename)
67 #define LOG_CONFIG_PROP(string) lsst::log::Log::configure_prop(string)
74 #define LOG_DEFAULT_NAME() lsst::log::Log::getDefaultLoggerName()
83 #define LOG_GET(logger) lsst::log::Log::getLogger(logger)
100 #define LOG_PUSHCTX(name) lsst::log::Log::pushContext(name)
109 #define LOG_POPCTX() lsst::log::Log::popContext()
121 #define LOG_MDC(key, value) lsst::log::Log::MDC(key, value)
129 #define LOG_MDC_REMOVE(key) lsst::log::Log::MDCRemove(key)
151 #define LOG_MDC_INIT(func) lsst::log::Log::MDCRegisterInit(std::function<void()>(func))
160 #define LOG_SET_LVL(logger, level) \
161 lsst::log::Log::getLogger(logger).setLevel(level)
171 #define LOG_GET_LVL(logger) \
172 lsst::log::Log::getLogger(logger).getLevel()
183 #define LOG_CHECK_LVL(logger, level) \
184 lsst::log::Log::getLogger(logger).isEnabledFor(level)
192 #define LOG_CHECK_TRACE() \
193 LOG4CXX_UNLIKELY(lsst::log::Log::getDefaultLogger().isTraceEnabled())
201 #define LOG_CHECK_DEBUG() \
202 LOG4CXX_UNLIKELY(lsst::log::Log::getDefaultLogger().isDebugEnabled())
210 #define LOG_CHECK_INFO() \
211 lsst::log::Log::getDefaultLogger().isInfoEnabled()
219 #define LOG_CHECK_WARN() \
220 lsst::log::Log::getDefaultLogger().isWarnEnabled()
228 #define LOG_CHECK_ERROR() \
229 lsst::log::Log::getDefaultLogger().isErrorEnabled()
237 #define LOG_CHECK_FATAL() \
238 lsst::log::Log::getDefaultLogger().isFatalEnabled()
249 #define LOG(logger, level, message...) \
251 lsst::log::Log log(lsst::log::Log::getLogger(logger)); \
252 if (log.isEnabledFor(level)) { \
253 log.log(log4cxx::Level::toLevel(level), LOG4CXX_LOCATION, message); } \
264 #define LOG_TRACE(message...) \
266 lsst::log::Log log; \
267 if (LOG4CXX_UNLIKELY(log.isTraceEnabled())) { \
268 log.log(log4cxx::Level::getTrace(), LOG4CXX_LOCATION, message); } \
279 #define LOG_DEBUG(message...) \
281 lsst::log::Log log; \
282 if (LOG4CXX_UNLIKELY(log.isDebugEnabled())) { \
283 log.log(log4cxx::Level::getDebug(), LOG4CXX_LOCATION, message); } \
294 #define LOG_INFO(message...) \
296 lsst::log::Log log; \
297 if (log.isInfoEnabled()) { \
298 log.log(log4cxx::Level::getInfo(), LOG4CXX_LOCATION, message); } \
309 #define LOG_WARN(message...) \
311 lsst::log::Log log; \
312 if (log.isWarnEnabled()) { \
313 log.log(log4cxx::Level::getWarn(), LOG4CXX_LOCATION, message); } \
324 #define LOG_ERROR(message...) \
326 lsst::log::Log log; \
327 if (log.isErrorEnabled()) { \
328 log.log(log4cxx::Level::getError(), LOG4CXX_LOCATION, message); } \
339 #define LOG_FATAL(message...) \
341 lsst::log::Log log; \
342 if (log.isFatalEnabled()) { \
343 log.log(log4cxx::Level::getFatal(), LOG4CXX_LOCATION, message); } \
348 #define LOG_MESSAGE_VIA_STREAM_(logger, level, message) \
349 std::ostringstream stream_; \
350 stream_ << message; \
351 logger.logMsg(level, LOG4CXX_LOCATION, stream_.str())
367 #define LOGS(logger, level, message) \
369 lsst::log::Log log(lsst::log::Log::getLogger(logger)); \
370 if (log.isEnabledFor(level)) { \
371 LOG_MESSAGE_VIA_STREAM_(log, log4cxx::Level::toLevel(level), message); \
386 #define LOGS_TRACE(message) \
388 lsst::log::Log log; \
389 if (LOG4CXX_UNLIKELY(log.isTraceEnabled())) { \
390 LOG_MESSAGE_VIA_STREAM_(log, log4cxx::Level::getTrace(), message); \
405 #define LOGS_DEBUG(message) \
407 lsst::log::Log log; \
408 if (LOG4CXX_UNLIKELY(log.isDebugEnabled())) { \
409 LOG_MESSAGE_VIA_STREAM_(log, log4cxx::Level::getDebug(), message); \
424 #define LOGS_INFO(message) \
426 lsst::log::Log log; \
427 if (log.isInfoEnabled()) { \
428 LOG_MESSAGE_VIA_STREAM_(log, log4cxx::Level::getInfo(), message); \
443 #define LOGS_WARN(message) \
445 lsst::log::Log log; \
446 if (log.isWarnEnabled()) { \
447 LOG_MESSAGE_VIA_STREAM_(log, log4cxx::Level::getWarn(), message); \
462 #define LOGS_ERROR(message) \
464 lsst::log::Log log; \
465 if (log.isErrorEnabled()) { \
466 LOG_MESSAGE_VIA_STREAM_(log, log4cxx::Level::getError(), message); \
481 #define LOGS_FATAL(message) \
483 lsst::log::Log log; \
484 if (log.isFatalEnabled()) { \
485 LOG_MESSAGE_VIA_STREAM_(log, log4cxx::Level::getFatal(), message); \
497 #define LOGL_TRACE(logger, message...) \
499 lsst::log::Log log(lsst::log::Log::getLogger(logger)); \
500 if (LOG4CXX_UNLIKELY(log.isTraceEnabled())) { \
501 log.log(log4cxx::Level::getTrace(), LOG4CXX_LOCATION, message);\
513 #define LOGL_DEBUG(logger, message...) \
515 lsst::log::Log log(lsst::log::Log::getLogger(logger)); \
516 if (LOG4CXX_UNLIKELY(log.isDebugEnabled())) { \
517 log.log(log4cxx::Level::getDebug(), LOG4CXX_LOCATION, message); \
529 #define LOGL_INFO(logger, message...) \
531 lsst::log::Log log(lsst::log::Log::getLogger(logger)); \
532 if (log.isInfoEnabled()) { \
533 log.log(log4cxx::Level::getInfo(), LOG4CXX_LOCATION, message); \
545 #define LOGL_WARN(logger, message...) \
547 lsst::log::Log log(lsst::log::Log::getLogger(logger)); \
548 if (log.isWarnEnabled()) { \
549 log.log(log4cxx::Level::getWarn(), LOG4CXX_LOCATION, message); \
561 #define LOGL_ERROR(logger, message...) \
563 lsst::log::Log log(lsst::log::Log::getLogger(logger)); \
564 if (log.isErrorEnabled()) { \
565 log.log(log4cxx::Level::getError(), LOG4CXX_LOCATION, message); \
577 #define LOGL_FATAL(logger, message...) \
579 lsst::log::Log log(lsst::log::Log::getLogger(logger)); \
580 if (log.isFatalEnabled()) { \
581 log.log(log4cxx::Level::getFatal(), LOG4CXX_LOCATION, message); \
597 #define LOGLS_TRACE(logger, message) \
599 lsst::log::Log log(lsst::log::Log::getLogger(logger)); \
600 if (LOG4CXX_UNLIKELY(log.isTraceEnabled())) { \
601 LOG_MESSAGE_VIA_STREAM_(log, log4cxx::Level::getTrace(), message); \
617 #define LOGLS_DEBUG(logger, message) \
619 lsst::log::Log log(lsst::log::Log::getLogger(logger)); \
620 if (LOG4CXX_UNLIKELY(log.isDebugEnabled())) { \
621 LOG_MESSAGE_VIA_STREAM_(log, log4cxx::Level::getDebug(), message); \
637 #define LOGLS_INFO(logger, message) \
639 lsst::log::Log log(lsst::log::Log::getLogger(logger)); \
640 if (log.isInfoEnabled()) { \
641 LOG_MESSAGE_VIA_STREAM_(log, log4cxx::Level::getInfo(), message); \
657 #define LOGLS_WARN(logger, message) \
659 lsst::log::Log log(lsst::log::Log::getLogger(logger)); \
660 if (log.isWarnEnabled()) { \
661 LOG_MESSAGE_VIA_STREAM_(log, log4cxx::Level::getWarn(), message); \
677 #define LOGLS_ERROR(logger, message) \
679 lsst::log::Log log(lsst::log::Log::getLogger(logger)); \
680 if (log.isErrorEnabled()) { \
681 LOG_MESSAGE_VIA_STREAM_(log, log4cxx::Level::getError(), message); \
697 #define LOGLS_FATAL(logger, message) \
699 lsst::log::Log log(lsst::log::Log::getLogger(logger)); \
700 if (log.isFatalEnabled()) { \
701 LOG_MESSAGE_VIA_STREAM_(log, log4cxx::Level::getFatal(), message); \
705 #define LOG_LVL_TRACE static_cast<int>(log4cxx::Level::TRACE_INT)
706 #define LOG_LVL_DEBUG static_cast<int>(log4cxx::Level::DEBUG_INT)
707 #define LOG_LVL_INFO static_cast<int>(log4cxx::Level::INFO_INT)
708 #define LOG_LVL_WARN static_cast<int>(log4cxx::Level::WARN_INT)
709 #define LOG_LVL_ERROR static_cast<int>(log4cxx::Level::ERROR_INT)
710 #define LOG_LVL_FATAL static_cast<int>(log4cxx::Level::FATAL_INT)
712 #define LOG_LOGGER lsst::log::Log
713 #define LOG_CTX lsst::log::LogContext
732 Log() : _logger(_defaultLogger()) { }
769 static void configure(std::string
const& filename);
777 static void MDC(std::string
const& key, std::string
const& value);
778 static void MDCRemove(std::string
const& key);
781 void log(log4cxx::LevelPtr level,
782 log4cxx::spi::LocationInfo
const& location,
783 char const* fmt, ...);
784 void logMsg(log4cxx::LevelPtr level,
785 log4cxx::spi::LocationInfo
const& location,
786 std::string
const& msg);
795 static log4cxx::LoggerPtr
const& _defaultLogger(log4cxx::LoggerPtr
const& newDefault=log4cxx::LoggerPtr());
802 Log(log4cxx::LoggerPtr
const& logger) :
Log() { _logger = logger; }
804 log4cxx::LoggerPtr _logger;
842 #endif // LSST_LOG_LOG_H
static Log getDefaultLogger()
Return default logger instance, same as default constructor.
bool isDebugEnabled() const
Check whether the logger is enabled for the DEBUG Level.
static void configure()
Explicitly configures log4cxx and initializes logging system.
static std::string getDefaultLoggerName()
Get the current default logger name.
void logMsg(log4cxx::LevelPtr level, log4cxx::spi::LocationInfo const &location, std::string const &msg)
Method used by LOGS_INFO and similar macros to process a log message.
bool isFatalEnabled() const
Check whether the logger is enabled for the FATAL Level.
This static class includes a variety of methods for interacting with the the logging module...
void log(log4cxx::LevelPtr level, log4cxx::spi::LocationInfo const &location, char const *fmt,...)
Method used by LOG_INFO and similar macros to process a log message with variable arguments along wit...
bool isEnabledFor(int level) const
Return whether the logging threshold of the logger is less than or equal to LEVEL.
bool isErrorEnabled() const
Check whether the logger is enabled for the ERROR Level.
LogContext(std::string const &name)
Create a logging context associated with a default logger name constructed by pushing name onto the p...
static void MDC(std::string const &key, std::string const &value)
Places a KEY/VALUE pair in the Mapped Diagnostic Context (MDC) for the current thread.
static void MDCRemove(std::string const &key)
Remove the value associated with KEY within the MDC.
bool isTraceEnabled() const
Check whether the logger is enabled for the TRACE Level.
int getLevel() const
Retrieve the logging threshold.
void setLevel(int level)
Set the logging threshold to LEVEL.
bool isWarnEnabled() const
Check whether the logger is enabled for the WARN Level.
static Log getLogger(Log const &logger)
unsigned lwpID()
Function which returns LWP ID on platforms which support it.
std::string getName() const
Get the logger name associated with the Log object.
This class handles the default logger name of a logging context.
static void configure_prop(std::string const &properties)
Configures log4cxx using a string containing the list of properties, equivalent to configuring from a...
bool isInfoEnabled() const
Check whether the logger is enabled for the INFO Level.
static void popContext()
Pops the last pushed name off the global hierarchical default logger name.
static void pushContext(std::string const &name)
Pushes NAME onto the global hierarchical default logger name.
static int MDCRegisterInit(std::function< void()> function)