1. LogManager 类封装
目的:构建一个管理日志器的”池”,能够管理输出不同地方的日志器,或者拥有不同权限的日志器。
* 置为单例对象
typedef kit_server::Single<LogManager> LoggerMgr;
1.1 成员变量
class LogManager{......private://建立名字和日志器的映射关系std::map<std::string, Logger::ptr> s_loggers;//默认日志器Logger::ptr m_root;//互斥锁MutexType m_mutex;};
1.2 接口
1.2.1 构造函数
/*** @brief 日志管理器类构造函数*/LogManager();LogManager::LogManager(){//生成一个默认的Logger 并且配置一个默认的LogAppender 输出到控制台m_root.reset(new Logger);m_root->addAppender(LogAppender::ptr(new StdoutLogAppender));//存入到容器中s_loggers[m_root->getName()] = m_root;}
1.2.2 getLogger()
功能:通过传入日志器的名称,获取具体的日志器对象智能指针
/*** @brief 获取日志器* @param[in] name 具体日志器名称* @return Logger::ptr*/Logger::ptr getLogger(const std::string &name);Logger::ptr LogManager::getLogger(const std::string &name){//锁 map容器s_loggersMutexType::Lock lock(m_mutex);auto it = s_loggers.find(name);if(it != s_loggers.end())return it->second;Logger::ptr logger(new Logger(name));s_loggers[name] = logger;//给新创建的日志器Logger一个logger->setDefaultRoot(m_root);return logger;}
1.2.3 getRoot()
功能:获取默认的日志器
/*** @brief 获取默认日志器root* @return Logger::ptr*/Logger::ptr getRoot() const {return m_root;}
1.2.4 toYamlString()
功能:将所有日志器信息以yaml结点返回
/*** @brief 将所有日志器信息以yaml结点返回* @return YAML::Node*/YAML::Node toYamlString();YAML::Node LogManager::toYamlString(){//锁 map容器s_loggersMutexType::Lock lock(m_mutex);YAML::Node node;//将管理的所有日志器的信息打包到yaml结点中for(auto &x : s_loggers){node.push_back(YAML::Load(x.second->toYamlString()));}return node;}
2. 将日志系统封装成便捷的宏调用
2.1 获取日志器
//通过单例LoggerMgr--->访问到LogManager中默认的Logger实例化对象#define KIT_LOG_ROOT() kit_server::LoggerMgr::GetInstance()->getRoot()//通过日志器的名字获取日志器实体#define KIT_LOG_NAME(name) kit_server::LoggerMgr::GetInstance()->getLogger(name)
2.2 固定日志级别输出日志内容
/*固定日志级别输出日志内容*/#define KIT_LOG_LEVEL(logger, level)\if(logger->getLevel() <= level)\kit_server::LogEventWrap(kit_server::LogEvent::ptr(new kit_server::LogEvent(logger, level, __FILE__, __LINE__, 0, kit_server::GetThreadId(), \kit_server::GetThreadName(), kit_server::GetCoroutineId(), time(0)))).getSS()#define KIT_LOG_DEBUG(logger) KIT_LOG_LEVEL(logger, kit_server::LogLevel::DEBUG)#define KIT_LOG_INFO(logger) KIT_LOG_LEVEL(logger, kit_server::LogLevel::INFO)#define KIT_LOG_WARN(logger) KIT_LOG_LEVEL(logger, kit_server::LogLevel::WARN)#define KIT_LOG_ERROR(logger) KIT_LOG_LEVEL(logger, kit_server::LogLevel::ERROR)#define KIT_LOG_FATAL(logger) KIT_LOG_LEVEL(logger, kit_server::LogLevel::FATAL)
2.3 带参日志输出日志内容
/*带参日志输出日志内容*/#define KIT_LOG_FMT_LEVEL(logger, level, fmt, ...)\if(level >= logger->getLevel())\kit_server::LogEventWrap(kit_server::LogEvent::ptr(new kit_server::LogEvent(logger, level, __FILE__, __LINE__, 0, kit_server::GetThreadId(), kit_server::GetThreadName(), kit_server::GetCoroutineId(), time(0)))).getEvent()->format(fmt, __VA_ARGS__)#define KIT_LOG_FMT_DEBUG(logger, fmt, ...) KIT_LOG_FMT_LEVEL(logger, kit_server::LogLevel::DEBUG, fmt, __VA_ARGS__)#define KIT_LOG_FMT_INFO(logger, fmt, ...) KIT_LOG_FMT_LEVEL(logger, kit_server::LogLevel::INFO, fmt, __VA_ARGS__)#define KIT_LOG_FMT_WARN(logger, fmt, ...) KIT_LOG_FMT_LEVEL(logger, kit_server::LogLevel::WARN, fmt, __VA_ARGS__)#define KIT_LOG_FMT_ERROR(logger, fmt, ...) KIT_LOG_FMT_LEVEL(logger, kit_server::LogLevel::ERROR, fmt, __VA_ARGS__)#define KIT_LOG_FMT_FATAL(logger, fmt, ...) KIT_LOG_FMT_LEVEL(logger, kit_server::LogLevel::FATAL, fmt, __VA_ARGS__)
