From 9d6944f9b8a9246759b9b1afb1d18d4e27c39e1d Mon Sep 17 00:00:00 2001 From: UPSquared Date: Tue, 22 May 2018 17:33:49 +0300 Subject: [PATCH] added useful macro for logger --- examples/c++/logger.cxx | 6 +++--- include/upm_logger.hpp | 31 ++++++++++++++++++------------- 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/examples/c++/logger.cxx b/examples/c++/logger.cxx index 61cdd02c..b4b1c0b4 100644 --- a/examples/c++/logger.cxx +++ b/examples/c++/logger.cxx @@ -5,12 +5,12 @@ using namespace upm; int main() { - UPM_LOGGER::getLogLevel() = LOG_ERROR; + UPM_LOGGER::LogLevel() = LOG_INFO; - UPM_LOGGER().get(LOG_WARNING) << "a loop with 4 iterations"; + UPM_LOG(LOG_WARNING) << "a loop with 4 iterations"; for (int i = 0; i < 4; ++i) { - UPM_LOGGER().get(LOG_DEBUG) << "i = " << i; + UPM_LOG(LOG_DEBUG) << "i = " << i; } return 0; diff --git a/include/upm_logger.hpp b/include/upm_logger.hpp index f0a44519..e5eb8a7d 100644 --- a/include/upm_logger.hpp +++ b/include/upm_logger.hpp @@ -5,6 +5,13 @@ #include #include +/* Helper macro for logger utility class. */ +#define UPM_LOG(log_level) \ + if ( log_level < UPM_LOGGER::LogLevel() ) \ + ; \ + else \ + UPM_LOGGER().log(log_level) + namespace upm { enum UpmLogLevel { @@ -27,14 +34,15 @@ namespace upm { public: UPM_LOGGER(); virtual ~UPM_LOGGER(); - std::ostringstream& get(UpmLogLevel level = LOG_INFO); - static UpmLogLevel& getLogLevel(); + std::ostringstream& log(UpmLogLevel level = LOG_ERROR); + static UpmLogLevel& LogLevel(); protected: std::ostringstream os; private: UPM_LOGGER(const UPM_LOGGER&); UPM_LOGGER& operator=(const UPM_LOGGER&); private: + // Track logLevel for this particular instance of UPM_LOGGER UpmLogLevel logLevel; public: @@ -51,20 +59,22 @@ namespace upm { UPM_LOGGER::UPM_LOGGER() {} - UpmLogLevel& UPM_LOGGER::getLogLevel() + UpmLogLevel& UPM_LOGGER::LogLevel() { static UpmLogLevel reportingLevel = LOG_DEBUG; + return reportingLevel; } - std::ostringstream& UPM_LOGGER::get(UpmLogLevel level) + std::ostringstream& UPM_LOGGER::log(UpmLogLevel level) { using namespace std::chrono; - os << "- " << duration_cast + os << "UPM - " << duration_cast (system_clock::now().time_since_epoch()).count(); os << " " << getLogLevelName(level) << ": "; os << std::string(level > LOG_DEBUG ? level - LOG_DEBUG : 0, '\t'); + logLevel = level; return os; @@ -72,13 +82,8 @@ namespace upm { UPM_LOGGER::~UPM_LOGGER() { - if (logLevel >= UPM_LOGGER::getLogLevel()) { - os << std::endl; - fprintf(stderr, "%s", os.str().c_str()); - fflush(stderr); - } + os << std::endl; + fprintf(stderr, "%s", os.str().c_str()); + fflush(stderr); } - } - -