diff options
Diffstat (limited to 'third_party/re2/util/logging.h')
-rw-r--r-- | third_party/re2/util/logging.h | 54 |
1 files changed, 36 insertions, 18 deletions
diff --git a/third_party/re2/util/logging.h b/third_party/re2/util/logging.h index d0a2d87..feac199 100644 --- a/third_party/re2/util/logging.h +++ b/third_party/re2/util/logging.h @@ -7,13 +7,13 @@ #ifndef RE2_UTIL_LOGGING_H__ #define RE2_UTIL_LOGGING_H__ -#ifndef WIN32 -#include <unistd.h> /* for write */ -#endif +#include <stdio.h> /* for fwrite */ #include <sstream> -#ifdef WIN32 -#include <io.h> -#endif + +#include "util/util.h" +#include "util/flags.h" + +DECLARE_int32(minloglevel); // Debug-only checking. #define DCHECK(condition) assert(condition) @@ -33,13 +33,16 @@ #define CHECK_EQ(x, y) CHECK((x) == (y)) #define CHECK_NE(x, y) CHECK((x) != (y)) -#define LOG_INFO LogMessage(__FILE__, __LINE__) -#define LOG_ERROR LOG_INFO -#define LOG_WARNING LOG_INFO +#define LOG_INFO LogMessage(__FILE__, __LINE__, 0) +#define LOG_WARNING LogMessage(__FILE__, __LINE__, 1) +#define LOG_ERROR LogMessage(__FILE__, __LINE__, 2) #define LOG_FATAL LogMessageFatal(__FILE__, __LINE__) #define LOG_QFATAL LOG_FATAL -#define VLOG(x) if((x)>0){}else LOG_INFO.stream() +// It seems that one of the Windows header files defines ERROR as 0. +#ifdef _WIN32 +#define LOG_0 LOG_INFO +#endif #ifdef NDEBUG #define DEBUG_MODE 0 @@ -51,16 +54,21 @@ #define LOG(severity) LOG_ ## severity.stream() +#define VLOG(x) if((x)>0){}else LOG_INFO.stream() + class LogMessage { public: - LogMessage(const char* file, int line) : flushed_(false) { + LogMessage(const char* file, int line, int severity) + : severity_(severity), flushed_(false) { stream() << file << ":" << line << ": "; } void Flush() { stream() << "\n"; - string s = str_.str(); - int n = (int)s.size(); // shut up msvc - if(write(2, s.data(), n) < 0) {} // shut up gcc + if (severity_ >= re2::FLAGS_minloglevel) { + string s = str_.str(); + size_t n = s.size(); + if (fwrite(s.data(), 1, n, stderr) < n) {} // shut up gcc + } flushed_ = true; } ~LogMessage() { @@ -69,23 +77,33 @@ class LogMessage { } } ostream& stream() { return str_; } - + private: + const int severity_; bool flushed_; std::ostringstream str_; - DISALLOW_EVIL_CONSTRUCTORS(LogMessage); + DISALLOW_COPY_AND_ASSIGN(LogMessage); }; +#ifdef _WIN32 +#pragma warning(push) +#pragma warning(disable: 4722) // destructor never returns +#endif + class LogMessageFatal : public LogMessage { public: LogMessageFatal(const char* file, int line) - : LogMessage(file, line) { } + : LogMessage(file, line, 3) {} ~LogMessageFatal() { Flush(); abort(); } private: - DISALLOW_EVIL_CONSTRUCTORS(LogMessageFatal); + DISALLOW_COPY_AND_ASSIGN(LogMessageFatal); }; +#ifdef _WIN32 +#pragma warning(pop) +#endif + #endif // RE2_UTIL_LOGGING_H__ |