diff options
Diffstat (limited to 'base/logging.hpp')
-rw-r--r-- | base/logging.hpp | 110 |
1 files changed, 68 insertions, 42 deletions
diff --git a/base/logging.hpp b/base/logging.hpp index 678a1b1685..fc9fd1d9f0 100644 --- a/base/logging.hpp +++ b/base/logging.hpp @@ -5,54 +5,62 @@ #include "base/src_point.hpp" #include <atomic> +#include <string> namespace my { - enum LogLevel - { - LDEBUG, - LINFO, - LWARNING, - LERROR, - LCRITICAL - }; +enum LogLevel +{ + LDEBUG, + LINFO, + LWARNING, + LERROR, + LCRITICAL +}; - using TLogLevel = std::atomic<LogLevel>; - typedef void (*LogMessageFn)(LogLevel level, SrcPoint const &, std::string const &); +std::string ToString(LogLevel level); +bool FromString(std::string const & s, LogLevel & level); +std::vector<std::string> const & GetLogLevelNames(); - extern LogMessageFn LogMessage; - extern TLogLevel g_LogLevel; - extern TLogLevel g_LogAbortLevel; +using TLogLevel = std::atomic<LogLevel>; +typedef void (*LogMessageFn)(LogLevel level, SrcPoint const &, std::string const &); - /// @return Pointer to previous message function. - LogMessageFn SetLogMessageFn(LogMessageFn fn); +LogLevel GetDefaultLogLevel(); +LogLevel GetDefaultLogAbortLevel(); - void LogMessageDefault(LogLevel level, SrcPoint const & srcPoint, std::string const & msg); - void LogMessageTests(LogLevel level, SrcPoint const & srcPoint, std::string const & msg); +extern LogMessageFn LogMessage; +extern TLogLevel g_LogLevel; +extern TLogLevel g_LogAbortLevel; - /// Scope Guard to temporarily suppress specific log level, for example, in unit tests: - /// ... - /// { - /// LogLevelSuppressor onlyLERRORAndLCriticalLogsAreEnabled; - /// TEST(SomeFunctionWhichHasDebugOrInfoOrWarningLogs(), ()); - /// } - struct ScopedLogLevelChanger - { - LogLevel m_old = g_LogLevel; - ScopedLogLevelChanger(LogLevel temporaryLogLevel = LERROR) { g_LogLevel = temporaryLogLevel; } - ~ScopedLogLevelChanger() { g_LogLevel = m_old; } - }; +/// @return Pointer to previous message function. +LogMessageFn SetLogMessageFn(LogMessageFn fn); + +void LogMessageDefault(LogLevel level, SrcPoint const & srcPoint, std::string const & msg); +void LogMessageTests(LogLevel level, SrcPoint const & srcPoint, std::string const & msg); - struct ScopedLogAbortLevelChanger +/// Scope Guard to temporarily suppress specific log level, for example, in unit tests: +/// ... +/// { +/// LogLevelSuppressor onlyLERRORAndLCriticalLogsAreEnabled; +/// TEST(SomeFunctionWhichHasDebugOrInfoOrWarningLogs(), ()); +/// } +struct ScopedLogLevelChanger +{ + LogLevel m_old = g_LogLevel; + ScopedLogLevelChanger(LogLevel temporaryLogLevel = LERROR) { g_LogLevel = temporaryLogLevel; } + ~ScopedLogLevelChanger() { g_LogLevel = m_old; } +}; + +struct ScopedLogAbortLevelChanger +{ + LogLevel m_old = g_LogAbortLevel; + ScopedLogAbortLevelChanger(LogLevel temporaryLogAbortLevel = LCRITICAL) { - LogLevel m_old = g_LogAbortLevel; - ScopedLogAbortLevelChanger(LogLevel temporaryLogAbortLevel = LCRITICAL) - { - g_LogAbortLevel = temporaryLogAbortLevel; - } - ~ScopedLogAbortLevelChanger() { g_LogAbortLevel = m_old; } - }; -} + g_LogAbortLevel = temporaryLogAbortLevel; + } + ~ScopedLogAbortLevelChanger() { g_LogAbortLevel = m_old; } +}; +} // namespace my using ::my::LDEBUG; using ::my::LINFO; @@ -62,9 +70,27 @@ using ::my::LCRITICAL; // Logging macro. // Example usage: LOG(LINFO, (Calc(), m_Var, "Some string constant")); -#define LOG(level, msg) do { if ((level) < ::my::g_LogLevel) {} \ - else { ::my::LogMessage(level, SRC(), ::my::impl::Message msg);} } while (false) +#define LOG(level, msg) \ + do \ + { \ + if ((level) < ::my::g_LogLevel) \ + { \ + } \ + else \ + { \ + ::my::LogMessage(level, SRC(), ::my::impl::Message msg); \ + } \ + } while (false) // Logging macro with short info (without entry point) -#define LOG_SHORT(level, msg) do { if ((level) < ::my::g_LogLevel) {} \ - else { ::my::LogMessage(level, my::SrcPoint(), ::my::impl::Message msg);} } while (false) +#define LOG_SHORT(level, msg) \ + do \ + { \ + if ((level) < ::my::g_LogLevel) \ + { \ + } \ + else \ + { \ + ::my::LogMessage(level, my::SrcPoint(), ::my::impl::Message msg); \ + } \ + } while (false) |