32 #ifndef LSST_LOG_LOG_H
33 #define LSST_LOG_LOG_H
43 #include <log4cxx/logger.h>
44 #include <boost/format.hpp>
52 #define LOG_CONFIG(filename) lsst::log::Log::configure(filename)
66 #define LOG_CONFIG_PROP(string) lsst::log::Log::configure_prop(string)
75 #define LOG_GET(logger) lsst::log::Log::getLogger(logger)
85 #define LOG_GET_CHILD(logger, suffix) lsst::log::Log::getLogger(logger).getChild(suffix)
97 #define LOG_MDC(key, value) lsst::log::Log::MDC(key, value)
105 #define LOG_MDC_REMOVE(key) lsst::log::Log::MDCRemove(key)
118 #define LOG_CONCAT_IMPL(a, b) a ## b
119 #define LOG_CONCAT_IMPL2(a, b) LOG_CONCAT_IMPL(a, b)
120 #define LOG_MDC_SCOPE(key, value) lsst::log::LogMDCScope LOG_CONCAT_IMPL2(_log_mdc_scope_, __COUNTER__)(key, value);
142 #define LOG_MDC_INIT(func) lsst::log::Log::MDCRegisterInit(std::function<void()>(func))
151 #define LOG_SET_LVL(logger, level) \
152 lsst::log::Log::getLogger(logger).setLevel(level)
162 #define LOG_GET_LVL(logger) \
163 lsst::log::Log::getLogger(logger).getLevel()
174 #define LOG_CHECK_LVL(logger, level) \
175 lsst::log::Log::getLogger(logger).isEnabledFor(level)
183 #define LOG_CHECK_TRACE() \
184 LOG4CXX_UNLIKELY(lsst::log::Log::getDefaultLogger().isTraceEnabled())
192 #define LOG_CHECK_DEBUG() \
193 LOG4CXX_UNLIKELY(lsst::log::Log::getDefaultLogger().isDebugEnabled())
201 #define LOG_CHECK_INFO() \
202 lsst::log::Log::getDefaultLogger().isInfoEnabled()
210 #define LOG_CHECK_WARN() \
211 lsst::log::Log::getDefaultLogger().isWarnEnabled()
219 #define LOG_CHECK_ERROR() \
220 lsst::log::Log::getDefaultLogger().isErrorEnabled()
228 #define LOG_CHECK_FATAL() \
229 lsst::log::Log::getDefaultLogger().isFatalEnabled()
240 #define LOG(logger, level, message...) \
242 lsst::log::Log log(lsst::log::Log::getLogger(logger)); \
243 if (log.isEnabledFor(level)) { \
244 log.log(log4cxx::Level::toLevel(level), LOG4CXX_LOCATION, message); } \
255 #define LOG_TRACE(message...) \
257 lsst::log::Log log; \
258 if (LOG4CXX_UNLIKELY(log.isTraceEnabled())) { \
259 log.log(log4cxx::Level::getTrace(), LOG4CXX_LOCATION, message); } \
270 #define LOG_DEBUG(message...) \
272 lsst::log::Log log; \
273 if (LOG4CXX_UNLIKELY(log.isDebugEnabled())) { \
274 log.log(log4cxx::Level::getDebug(), LOG4CXX_LOCATION, message); } \
285 #define LOG_INFO(message...) \
287 lsst::log::Log log; \
288 if (log.isInfoEnabled()) { \
289 log.log(log4cxx::Level::getInfo(), LOG4CXX_LOCATION, message); } \
300 #define LOG_WARN(message...) \
302 lsst::log::Log log; \
303 if (log.isWarnEnabled()) { \
304 log.log(log4cxx::Level::getWarn(), LOG4CXX_LOCATION, message); } \
315 #define LOG_ERROR(message...) \
317 lsst::log::Log log; \
318 if (log.isErrorEnabled()) { \
319 log.log(log4cxx::Level::getError(), LOG4CXX_LOCATION, message); } \
330 #define LOG_FATAL(message...) \
332 lsst::log::Log log; \
333 if (log.isFatalEnabled()) { \
334 log.log(log4cxx::Level::getFatal(), LOG4CXX_LOCATION, message); } \
339 #define LOG_MESSAGE_VIA_STREAM_(logger, level, message) \
340 std::ostringstream stream_; \
341 stream_ << message; \
342 logger.logMsg(level, LOG4CXX_LOCATION, stream_.str())
358 #define LOGS(logger, level, message) \
360 lsst::log::Log log(lsst::log::Log::getLogger(logger)); \
361 if (log.isEnabledFor(level)) { \
362 LOG_MESSAGE_VIA_STREAM_(log, log4cxx::Level::toLevel(level), message); \
377 #define LOGS_TRACE(message) \
379 lsst::log::Log log; \
380 if (LOG4CXX_UNLIKELY(log.isTraceEnabled())) { \
381 LOG_MESSAGE_VIA_STREAM_(log, log4cxx::Level::getTrace(), message); \
396 #define LOGS_DEBUG(message) \
398 lsst::log::Log log; \
399 if (LOG4CXX_UNLIKELY(log.isDebugEnabled())) { \
400 LOG_MESSAGE_VIA_STREAM_(log, log4cxx::Level::getDebug(), message); \
415 #define LOGS_INFO(message) \
417 lsst::log::Log log; \
418 if (log.isInfoEnabled()) { \
419 LOG_MESSAGE_VIA_STREAM_(log, log4cxx::Level::getInfo(), message); \
434 #define LOGS_WARN(message) \
436 lsst::log::Log log; \
437 if (log.isWarnEnabled()) { \
438 LOG_MESSAGE_VIA_STREAM_(log, log4cxx::Level::getWarn(), message); \
453 #define LOGS_ERROR(message) \
455 lsst::log::Log log; \
456 if (log.isErrorEnabled()) { \
457 LOG_MESSAGE_VIA_STREAM_(log, log4cxx::Level::getError(), message); \
472 #define LOGS_FATAL(message) \
474 lsst::log::Log log; \
475 if (log.isFatalEnabled()) { \
476 LOG_MESSAGE_VIA_STREAM_(log, log4cxx::Level::getFatal(), message); \
488 #define LOGL_TRACE(logger, message...) \
490 lsst::log::Log log(lsst::log::Log::getLogger(logger)); \
491 if (LOG4CXX_UNLIKELY(log.isTraceEnabled())) { \
492 log.log(log4cxx::Level::getTrace(), LOG4CXX_LOCATION, message);\
504 #define LOGL_DEBUG(logger, message...) \
506 lsst::log::Log log(lsst::log::Log::getLogger(logger)); \
507 if (LOG4CXX_UNLIKELY(log.isDebugEnabled())) { \
508 log.log(log4cxx::Level::getDebug(), LOG4CXX_LOCATION, message); \
520 #define LOGL_INFO(logger, message...) \
522 lsst::log::Log log(lsst::log::Log::getLogger(logger)); \
523 if (log.isInfoEnabled()) { \
524 log.log(log4cxx::Level::getInfo(), LOG4CXX_LOCATION, message); \
536 #define LOGL_WARN(logger, message...) \
538 lsst::log::Log log(lsst::log::Log::getLogger(logger)); \
539 if (log.isWarnEnabled()) { \
540 log.log(log4cxx::Level::getWarn(), LOG4CXX_LOCATION, message); \
552 #define LOGL_ERROR(logger, message...) \
554 lsst::log::Log log(lsst::log::Log::getLogger(logger)); \
555 if (log.isErrorEnabled()) { \
556 log.log(log4cxx::Level::getError(), LOG4CXX_LOCATION, message); \
568 #define LOGL_FATAL(logger, message...) \
570 lsst::log::Log log(lsst::log::Log::getLogger(logger)); \
571 if (log.isFatalEnabled()) { \
572 log.log(log4cxx::Level::getFatal(), LOG4CXX_LOCATION, message); \
588 #define LOGLS_TRACE(logger, message) \
590 lsst::log::Log log(lsst::log::Log::getLogger(logger)); \
591 if (LOG4CXX_UNLIKELY(log.isTraceEnabled())) { \
592 LOG_MESSAGE_VIA_STREAM_(log, log4cxx::Level::getTrace(), message); \
608 #define LOGLS_DEBUG(logger, message) \
610 lsst::log::Log log(lsst::log::Log::getLogger(logger)); \
611 if (LOG4CXX_UNLIKELY(log.isDebugEnabled())) { \
612 LOG_MESSAGE_VIA_STREAM_(log, log4cxx::Level::getDebug(), message); \
628 #define LOGLS_INFO(logger, message) \
630 lsst::log::Log log(lsst::log::Log::getLogger(logger)); \
631 if (log.isInfoEnabled()) { \
632 LOG_MESSAGE_VIA_STREAM_(log, log4cxx::Level::getInfo(), message); \
648 #define LOGLS_WARN(logger, message) \
650 lsst::log::Log log(lsst::log::Log::getLogger(logger)); \
651 if (log.isWarnEnabled()) { \
652 LOG_MESSAGE_VIA_STREAM_(log, log4cxx::Level::getWarn(), message); \
668 #define LOGLS_ERROR(logger, message) \
670 lsst::log::Log log(lsst::log::Log::getLogger(logger)); \
671 if (log.isErrorEnabled()) { \
672 LOG_MESSAGE_VIA_STREAM_(log, log4cxx::Level::getError(), message); \
688 #define LOGLS_FATAL(logger, message) \
690 lsst::log::Log log(lsst::log::Log::getLogger(logger)); \
691 if (log.isFatalEnabled()) { \
692 LOG_MESSAGE_VIA_STREAM_(log, log4cxx::Level::getFatal(), message); \
696 #define LOG_LVL_TRACE static_cast<int>(log4cxx::Level::TRACE_INT)
697 #define LOG_LVL_DEBUG static_cast<int>(log4cxx::Level::DEBUG_INT)
698 #define LOG_LVL_INFO static_cast<int>(log4cxx::Level::INFO_INT)
699 #define LOG_LVL_WARN static_cast<int>(log4cxx::Level::WARN_INT)
700 #define LOG_LVL_ERROR static_cast<int>(log4cxx::Level::ERROR_INT)
701 #define LOG_LVL_FATAL static_cast<int>(log4cxx::Level::FATAL_INT)
703 #define LOG_LOGGER lsst::log::Log
719 Log() : _logger(_defaultLogger()) { }
757 static void configure(std::string
const& filename);
760 static Log getLogger(
Log const& logger) {
return logger; }
761 static Log getLogger(std::string
const& loggername);
763 static std::string
MDC(std::string
const& key, std::string
const& value);
764 static void MDCRemove(std::string
const& key);
765 static int MDCRegisterInit(std::function<
void()>
function);
767 void log(log4cxx::LevelPtr level,
768 log4cxx::spi::LocationInfo
const& location,
769 char const* fmt, ...);
770 void logMsg(log4cxx::LevelPtr level,
771 log4cxx::spi::LocationInfo
const& location,
772 std::string
const& msg);
782 static log4cxx::LoggerPtr
const& _defaultLogger();
790 Log(log4cxx::LoggerPtr
const& logger) : Log() { _logger = logger; }
792 log4cxx::LoggerPtr _logger;
814 _oldValue = other._oldValue;
819 if (not _key.empty()) {
820 if (_oldValue.empty()) {
827 _oldValue = other._oldValue;
836 if (not _key.empty()) {
837 if (_oldValue.empty()) {
847 std::string _oldValue;
bool isErrorEnabled() const
Definition: Log.h:728
static Log getDefaultLogger()
Return default logger instance, same as default constructor.
Definition: Log.h:754
static void MDCRemove(std::string const &key)
Definition: Log.cc:288
int getLevel() const
Definition: Log.cc:318
bool isEnabledFor(int level) const
Definition: Log.cc:333
void logMsg(log4cxx::LevelPtr level, log4cxx::spi::LocationInfo const &location, std::string const &msg)
Definition: Log.cc:388
bool isTraceEnabled() const
Definition: Log.h:740
Log getChild(std::string const &suffix) const
Definition: Log.cc:354
static void configure_prop(std::string const &properties)
Definition: Log.cc:220
bool isInfoEnabled() const
Definition: Log.h:736
void setLevel(int level)
Definition: Log.cc:311
bool isWarnEnabled() const
Definition: Log.h:744
bool isDebugEnabled() const
Definition: Log.h:724
bool isFatalEnabled() const
Definition: Log.h:732
static void configure()
Definition: Log.cc:177
static std::string MDC(std::string const &key, std::string const &value)
Definition: Log.cc:274
void log(log4cxx::LevelPtr level, log4cxx::spi::LocationInfo const &location, char const *fmt,...)
Definition: Log.cc:374
std::string getName() const
Definition: Log.cc:240
LogMDCScope(std::string const &key, std::string const &value)
Definition: Log.h:802
~LogMDCScope()
Definition: Log.h:835