Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'base/logging.hpp')
-rw-r--r--base/logging.hpp110
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)