diff options
author | lararennie@google.com <lararennie@google.com@ee073f10-1060-11df-b6a4-87a95322a99c> | 2013-08-06 13:58:58 +0000 |
---|---|---|
committer | lararennie@google.com <lararennie@google.com@ee073f10-1060-11df-b6a4-87a95322a99c> | 2013-08-06 13:58:58 +0000 |
commit | 67b8ca8d34d2c1625c90af839309007b9c66f65a (patch) | |
tree | 19ecd1e139d321b327e114ff5110ef70eb93ebd2 | |
parent | 7e77f5f74f097c32c256e8e1270ecbc306fc6567 (diff) | |
download | phonenumbers-67b8ca8d34d2c1625c90af839309007b9c66f65a.tar.gz |
Fixing issue where default_logger.h conflates LOG and VLOG. Issue reported and original idea for a fix provided by ben.darnell.
git-svn-id: http://libphonenumber.googlecode.com/svn/trunk/cpp/src/phonenumbers@599 ee073f10-1060-11df-b6a4-87a95322a99c
-rw-r--r-- | default_logger.cc | 25 | ||||
-rw-r--r-- | default_logger.h | 8 | ||||
-rw-r--r-- | logger.h | 20 |
3 files changed, 38 insertions, 15 deletions
diff --git a/default_logger.cc b/default_logger.cc index 44379a5..c54b640 100644 --- a/default_logger.cc +++ b/default_logger.cc @@ -29,18 +29,27 @@ void StdoutLogger::WriteMessage(const string& msg) { } void StdoutLogger::WriteLevel() { - LogLevel log_level = level(); + int verbosity_level = level(); + if (verbosity_level <= 0) { + verbosity_level = LOG_FATAL; + } + cout << "["; - switch (log_level) { - case LOG_FATAL: cout << "FATAL"; break; + // Handle verbose logs first. + if (verbosity_level > LOG_DEBUG) { + cout << "VLOG" << (verbosity_level - LOG_DEBUG); + } else { + switch (verbosity_level) { + case LOG_FATAL: cout << "FATAL"; break; #ifdef ERROR // In case ERROR is defined by MSVC (i.e not set to LOG_ERROR). - case ERROR: + case ERROR: #endif - case LOG_ERROR: cout << "ERROR"; break; - case LOG_WARNING: cout << "WARNING"; break; - case LOG_INFO: cout << "INFO"; break; - case LOG_DEBUG: cout << "DEBUG"; break; + case LOG_ERROR: cout << "ERROR"; break; + case LOG_WARNING: cout << "WARNING"; break; + case LOG_INFO: cout << "INFO"; break; + case LOG_DEBUG: cout << "DEBUG"; break; + } } cout << "]"; } diff --git a/default_logger.h b/default_logger.h index afb6fc9..25754d7 100644 --- a/default_logger.h +++ b/default_logger.h @@ -74,7 +74,7 @@ class LoggerHandler { Logger* const impl_; }; -inline LoggerHandler VLOG(int n) { +inline LoggerHandler LOG(int n) { Logger* const logger_impl = Logger::mutable_logger_impl(); if (logger_impl->level() < n) { return LoggerHandler(NULL); @@ -83,8 +83,10 @@ inline LoggerHandler VLOG(int n) { return LoggerHandler(logger_impl); } -inline LoggerHandler LOG(int n) { - return VLOG(n); +inline LoggerHandler VLOG(int n) { + // VLOG(1) is the next logging level after LOG(DEBUG). + n += LOG_DEBUG; + return LOG(n); } // Default logger implementation used by PhoneNumberUtil class. It outputs the @@ -25,7 +25,7 @@ namespace phonenumbers { using std::string; -enum LogLevel { +enum { LOG_FATAL = 1, LOG_ERROR, LOG_WARNING, @@ -54,14 +54,26 @@ class Logger { // Writes the provided message to the underlying output stream. virtual void WriteMessage(const string& msg) = 0; - inline LogLevel level() const { + // Note that if set_verbosity_level has been used to set the level to a value + // that is not represented by an enum, the result here will be a log + // level that is higher than LOG_DEBUG. + inline int level() const { return level_; } - inline void set_level(LogLevel level) { + inline void set_level(int level) { level_ = level; } + // If you want to see verbose logs in addition to other logs, use this method. + // This will result in all log messages at the levels above being shown, along + // with calls to VLOG with the verbosity level set to this level or lower. + // For example, set_verbosity_level(2) will show calls of VLOG(1) and VLOG(2) + // but not VLOG(3), along with all calls to LOG(). + inline void set_verbosity_level(int verbose_logs_level) { + set_level(LOG_DEBUG + verbose_logs_level); + } + static inline Logger* set_logger_impl(Logger* logger) { impl_ = logger; return logger; @@ -73,7 +85,7 @@ class Logger { private: static Logger* impl_; - LogLevel level_; + int level_; }; // Logger that does not log anything. It could be useful to "mute" the |