16#ifndef MIRAI_LOGGER_HPP_
17#define MIRAI_LOGGER_HPP_
114#define MIRAI_LOGGING_LEVELS_TRACE 0
115#define MIRAI_LOGGING_LEVELS_DEBUG 1
116#define MIRAI_LOGGING_LEVELS_INFO 2
117#define MIRAI_LOGGING_LEVELS_WARN 3
118#define MIRAI_LOGGING_LEVELS_ERROR 4
119#define MIRAI_LOGGING_LEVELS_FATAL 5
120#define MIRAI_LOGGING_LEVELS_OFF 6
122#ifndef MIRAI_LOGGING_LEVEL
123#define MIRAI_LOGGING_LEVEL MIRAI_LOGGING_LEVELS_INFO
126#if MIRAI_LOGGING_LEVEL <= MIRAI_LOGGING_LEVELS_TRACE
127#define LOG_TRACE(logger, msg) \
130 if ((logger).CheckLoggingLevel(Mirai::LoggingLevels::TRACE)) \
131 (logger).log((msg), Mirai::LoggingLevels::TRACE); \
134#define LOG_TRACE(logger, msg) (void)0
137#if MIRAI_LOGGING_LEVEL <= MIRAI_LOGGING_LEVELS_DEBUG
138#define LOG_DEBUG(logger, msg) \
141 if ((logger).CheckLoggingLevel(Mirai::LoggingLevels::DEBUG)) \
142 (logger).log((msg), Mirai::LoggingLevels::DEBUG); \
145#define LOG_DEBUG(logger, msg) (void)0
148#if MIRAI_LOGGING_LEVEL <= MIRAI_LOGGING_LEVELS_INFO
149#define LOG_INFO(logger, msg) \
152 if ((logger).CheckLoggingLevel(Mirai::LoggingLevels::INFO)) \
153 (logger).log((msg), Mirai::LoggingLevels::INFO); \
156#define LOG_INFO(logger, msg) (void)0
159#if MIRAI_LOGGING_LEVEL <= MIRAI_LOGGING_LEVELS_WARN
160#define LOG_WARN(logger, msg) \
163 if ((logger).CheckLoggingLevel(Mirai::LoggingLevels::WARN)) \
164 (logger).log((msg), Mirai::LoggingLevels::WARN); \
167#define LOG_WARN(logger, msg) (void)0
170#if MIRAI_LOGGING_LEVEL <= MIRAI_LOGGING_LEVELS_ERROR
171#define LOG_ERROR(logger, msg) \
174 if ((logger).CheckLoggingLevel(Mirai::LoggingLevels::ERROR)) \
175 (logger).log((msg), Mirai::LoggingLevels::ERROR); \
178#define LOG_ERROR(logger, msg) (void)0
181#if MIRAI_LOGGING_LEVEL <= MIRAI_LOGGING_LEVELS_FATAL
182#define LOG_FATAL(logger, msg) \
185 if ((logger).CheckLoggingLevel(Mirai::LoggingLevels::FATAL)) \
186 (logger).log((msg), Mirai::LoggingLevels::FATAL); \
189#define LOG_FATAL(logger, msg) (void)0
virtual ~ILogger()=default
ILogger(LoggingLevels level)
bool CheckLoggingLevel(LoggingLevels level)
检查该等级的日志是否会被输出
virtual void log(const std::string &msg, LoggingLevels level)=0
输出日志
ILogger(const ILogger &)=delete
std::atomic< LoggingLevels > level_
ILogger(ILogger &&)=delete
ILogger & operator=(ILogger &&)=delete
void SetLoggingLevel(LoggingLevels level)
设置日志等级
ILogger & operator=(const ILogger &)=delete
void log(const std::string &, LoggingLevels) override
输出日志