diff options
Diffstat (limited to 'lib/common/Logging.h')
-rw-r--r-- | lib/common/Logging.h | 184 |
1 files changed, 184 insertions, 0 deletions
diff --git a/lib/common/Logging.h b/lib/common/Logging.h index 15400711..bc0203bb 100644 --- a/lib/common/Logging.h +++ b/lib/common/Logging.h @@ -10,6 +10,11 @@ #ifndef LOGGING__H #define LOGGING__H +<<<<<<< HEAD +======= +#include <assert.h> + +>>>>>>> 0.12 #include <cerrno> #include <cstring> #include <iomanip> @@ -41,6 +46,7 @@ if (Logging::IsEnabled(Log::TRACE)) \ { BOX_LOG(Log::TRACE, stuff) } +<<<<<<< HEAD #define BOX_SYS_ERROR(stuff) \ stuff << ": " << std::strerror(errno) << " (" << errno << ")" @@ -66,6 +72,48 @@ inline std::string GetNativeErrorMessage() return _box_log_line.str(); #endif } +======= +#define BOX_SYS_ERRNO_MESSAGE(error_number, stuff) \ + stuff << ": " << std::strerror(error_number) << \ + " (" << error_number << ")" + +#define BOX_FILE_MESSAGE(filename, message) \ + message << ": " << filename + +#define BOX_SYS_FILE_ERRNO_MESSAGE(filename, error_number, message) \ + BOX_SYS_ERRNO_MESSAGE(error_number, BOX_FILE_MESSAGE(filename, message)) + +#define BOX_SYS_ERROR_MESSAGE(stuff) \ + BOX_SYS_ERRNO_MESSAGE(errno, stuff) + +#define BOX_LOG_SYS_WARNING(stuff) \ + BOX_WARNING(BOX_SYS_ERROR_MESSAGE(stuff)) +#define BOX_LOG_SYS_ERROR(stuff) \ + BOX_ERROR(BOX_SYS_ERROR_MESSAGE(stuff)) +#define BOX_LOG_SYS_ERRNO(error_number, stuff) \ + BOX_ERROR(BOX_SYS_ERRNO_MESSAGE(error_number, stuff)) +#define BOX_LOG_SYS_FATAL(stuff) \ + BOX_FATAL(BOX_SYS_ERROR_MESSAGE(stuff)) + +#define THROW_SYS_ERROR_NUMBER(message, error_number, exception, subtype) \ + THROW_EXCEPTION_MESSAGE(exception, subtype, \ + BOX_SYS_ERRNO_MESSAGE(error_number, message)) + +#define THROW_SYS_ERROR(message, exception, subtype) \ + THROW_SYS_ERROR_NUMBER(message, errno, exception, subtype) + +#define THROW_SYS_FILE_ERROR(message, filename, exception, subtype) \ + THROW_SYS_ERROR_NUMBER(BOX_FILE_MESSAGE(filename, message), \ + errno, exception, subtype) + +#define THROW_SYS_FILE_ERRNO(message, filename, error_number, exception, subtype) \ + THROW_SYS_ERROR_NUMBER(BOX_FILE_MESSAGE(filename, message), \ + error_number, exception, subtype) + +#define THROW_FILE_ERROR(message, filename, exception, subtype) \ + THROW_EXCEPTION_MESSAGE(exception, subtype, \ + BOX_FILE_MESSAGE(filename, message)) +>>>>>>> 0.12 #ifdef WIN32 #define BOX_LOG_WIN_ERROR(stuff) \ @@ -78,14 +126,40 @@ inline std::string GetNativeErrorMessage() BOX_WARNING(stuff << ": " << GetErrorMessage(number)) #define BOX_LOG_NATIVE_ERROR(stuff) BOX_LOG_WIN_ERROR(stuff) #define BOX_LOG_NATIVE_WARNING(stuff) BOX_LOG_WIN_WARNING(stuff) +<<<<<<< HEAD +======= + #define BOX_WIN_ERRNO_MESSAGE(error_number, stuff) \ + stuff << ": " << GetErrorMessage(error_number) + #define THROW_WIN_ERROR_NUMBER(message, error_number, exception, subtype) \ + THROW_EXCEPTION_MESSAGE(exception, subtype, \ + BOX_WIN_ERRNO_MESSAGE(error_number, message)) + #define THROW_WIN_FILE_ERRNO(message, filename, error_number, exception, subtype) \ + THROW_WIN_ERROR_NUMBER(BOX_FILE_MESSAGE(filename, message), \ + error_number, exception, subtype) + #define THROW_WIN_FILE_ERROR(message, filename, exception, subtype) \ + THROW_WIN_FILE_ERRNO(message, filename, GetLastError(), \ + exception, subtype) +>>>>>>> 0.12 #else #define BOX_LOG_NATIVE_ERROR(stuff) BOX_LOG_SYS_ERROR(stuff) #define BOX_LOG_NATIVE_WARNING(stuff) BOX_LOG_SYS_WARNING(stuff) #endif +<<<<<<< HEAD #define BOX_LOG_SOCKET_ERROR(_type, _name, _port, stuff) \ BOX_LOG_NATIVE_ERROR(stuff << " (type " << _type << ", name " << \ _name << ", port " << _port << ")") +======= +#ifdef WIN32 +# define BOX_LOG_SOCKET_ERROR(_type, _name, _port, stuff) \ + BOX_LOG_WIN_ERROR_NUMBER(stuff << " (type " << _type << ", name " << \ + _name << ", port " << _port << ")", WSAGetLastError()) +#else +# define BOX_LOG_SOCKET_ERROR(_type, _name, _port, stuff) \ + BOX_LOG_NATIVE_ERROR(stuff << " (type " << _type << ", name " << \ + _name << ", port " << _port << ")") +#endif +>>>>>>> 0.12 #define BOX_FORMAT_HEX32(number) \ std::hex << \ @@ -110,6 +184,15 @@ inline std::string GetNativeErrorMessage() std::setw(6) << \ timespec.tv_usec +<<<<<<< HEAD +======= +#define BOX_FORMAT_MICROSECONDS(t) \ + (int)((t) / 1000000) << "." << \ + std::setw(6) << \ + std::setfill('0') << \ + (int)((t) % 1000000) << " seconds" + +>>>>>>> 0.12 #undef ERROR namespace Log @@ -157,8 +240,32 @@ class Logger virtual const char* GetType() = 0; Log::Level GetLevel() { return mCurrentLevel; } +<<<<<<< HEAD virtual void SetProgramName(const std::string& rProgramName) = 0; +======= + bool IsEnabled(Log::Level level); + + virtual void SetProgramName(const std::string& rProgramName) = 0; + + class Guard + { + private: + Logger& mLogger; + Log::Level mOldLevel; + + public: + Guard(Logger& Logger) + : mLogger(Logger) + { + mOldLevel = Logger.GetLevel(); + } + ~Guard() + { + mLogger.Filter(mOldLevel); + } + }; +>>>>>>> 0.12 }; // -------------------------------------------------------------------------- @@ -266,22 +373,54 @@ class Logging static void SetProgramName(const std::string& rProgramName); static std::string GetProgramName() { return sProgramName; } static void SetFacility(int facility); +<<<<<<< HEAD +======= + static Console& GetConsole() { return *spConsole; } + static Syslog& GetSyslog() { return *spSyslog; } +>>>>>>> 0.12 class Guard { private: Log::Level mOldLevel; +<<<<<<< HEAD +======= + static int sGuardCount; + static Log::Level sOriginalLevel; +>>>>>>> 0.12 public: Guard(Log::Level newLevel) { mOldLevel = Logging::GetGlobalLevel(); +<<<<<<< HEAD +======= + if(sGuardCount == 0) + { + sOriginalLevel = mOldLevel; + } + sGuardCount++; +>>>>>>> 0.12 Logging::SetGlobalLevel(newLevel); } ~Guard() { +<<<<<<< HEAD Logging::SetGlobalLevel(mOldLevel); } +======= + sGuardCount--; + Logging::SetGlobalLevel(mOldLevel); + } + + static bool IsActive() { return (sGuardCount > 0); } + static Log::Level GetOriginalLevel() { return sOriginalLevel; } + static bool IsGuardingFrom(Log::Level originalLevel) + { + return IsActive() && + (int)sOriginalLevel >= (int)originalLevel; + } +>>>>>>> 0.12 }; class Tagger @@ -290,15 +429,33 @@ class Logging std::string mOldTag; public: +<<<<<<< HEAD Tagger(const std::string& rTempTag) { mOldTag = Logging::GetProgramName(); +======= + Tagger() + : mOldTag(Logging::GetProgramName()) + { + } + Tagger(const std::string& rTempTag) + : mOldTag(Logging::GetProgramName()) + { +>>>>>>> 0.12 Logging::SetProgramName(mOldTag + " " + rTempTag); } ~Tagger() { Logging::SetProgramName(mOldTag); } +<<<<<<< HEAD +======= + + void Change(const std::string& newTempTag) + { + Logging::SetProgramName(mOldTag + " " + newTempTag); + } +>>>>>>> 0.12 }; }; @@ -341,6 +498,33 @@ class HideExceptionMessageGuard bool mOldHiddenState; }; +<<<<<<< HEAD +======= +class HideSpecificExceptionGuard +{ + private: + std::pair<int, int> mExceptionCode; + + public: + typedef std::vector<std::pair<int, int> > SuppressedExceptions_t; + static SuppressedExceptions_t sSuppressedExceptions; + + HideSpecificExceptionGuard(int type, int subtype) + : mExceptionCode(std::pair<int, int>(type, subtype)) + { + sSuppressedExceptions.push_back(mExceptionCode); + } + ~HideSpecificExceptionGuard() + { + SuppressedExceptions_t::reverse_iterator i = + sSuppressedExceptions.rbegin(); + assert(*i == mExceptionCode); + sSuppressedExceptions.pop_back(); + } + static bool IsHidden(int type, int subtype); +}; + +>>>>>>> 0.12 std::string PrintEscapedBinaryData(const std::string& rInput); #endif // LOGGING__H |