15 #include "atomic_static.h"
22 static Logger& GetInstance() {
23 ATOMIC_STATIC(
Logger, instance);
28 typedef std::function<void(
unsigned int level,
const char* file,
29 unsigned int line,
const char* msg)> LogFunc;
31 void SetLogger(LogFunc func) { m_func = func; }
33 void set_min_level(
unsigned int level) { m_min_level = level; }
34 unsigned int min_level()
const {
return m_min_level; }
36 void Log(
unsigned int level,
const char* file,
unsigned int line,
38 if (!m_func || level < m_min_level)
return;
39 m_func(level, file, line, msg);
42 bool HasLogger()
const {
return m_func !=
nullptr; }
48 unsigned int m_min_level = 20;
53 #define LOG(level, x) \
55 nt::Logger& logger = nt::Logger::GetInstance(); \
56 if (logger.min_level() <= level && logger.HasLogger()) { \
57 std::ostringstream oss; \
59 logger.Log(level, __FILE__, __LINE__, oss.str().c_str()); \
64 #define ERROR(x) LOG(NT_LOG_ERROR, x)
65 #define WARNING(x) LOG(NT_LOG_WARNING, x)
66 #define INFO(x) LOG(NT_LOG_INFO, x)
69 #define DEBUG(x) do {} while (0)
70 #define DEBUG1(x) do {} while (0)
71 #define DEBUG2(x) do {} while (0)
72 #define DEBUG3(x) do {} while (0)
73 #define DEBUG4(x) do {} while (0)
75 #define DEBUG(x) LOG(NT_LOG_DEBUG, x)
76 #define DEBUG1(x) LOG(NT_LOG_DEBUG1, x)
77 #define DEBUG2(x) LOG(NT_LOG_DEBUG2, x)
78 #define DEBUG3(x) LOG(NT_LOG_DEBUG3, x)
79 #define DEBUG4(x) LOG(NT_LOG_DEBUG4, x)