#ifndef LOGUTIL_H #define LOGUTIL_H #include "spdlog/spdlog.h" #include "spdlog/sinks/daily_file_sink.h" #include "SettingConfig.h" // use embedded macro to support file and line number #define LOG_TRACE(...) SPDLOG_LOGGER_CALL(LogUtil::getInstance()->getLogger().get(), spdlog::level::trace, __VA_ARGS__) #define LOG_DEBUG(...) SPDLOG_LOGGER_CALL(LogUtil::getInstance()->getLogger().get(), spdlog::level::debug, __VA_ARGS__) #define LOG_INFO(...) SPDLOG_LOGGER_CALL(LogUtil::getInstance()->getLogger().get(), spdlog::level::info, __VA_ARGS__) #define LOG_WARN(...) SPDLOG_LOGGER_CALL(LogUtil::getInstance()->getLogger().get(), spdlog::level::warn, __VA_ARGS__) #define LOG_ERROR(...) SPDLOG_LOGGER_CALL(LogUtil::getInstance()->getLogger().get(), spdlog::level::err, __VA_ARGS__) class LogUtil { public: ~LogUtil() { spdlog::drop_all(); } LogUtil(const LogUtil&)=delete; LogUtil& operator=(const LogUtil&)=delete; //禁止生成默认赋值函数 // magic singleton static static LogUtil* getInstance() { static LogUtil instance; return &instance; } std::shared_ptr<spdlog::logger> getLogger() { return m_logger; } private: LogUtil() { try { // Create a daily logger - a new file is created every day on 00:00am m_logger = spdlog::daily_logger_mt("CasicIrisIdentify", SettingConfig::getInstance().LOG_FILE.toStdString(), 0, 0); m_logger->set_pattern("[%Y-%m-%d %H:%M:%S.%e][%l] %v"); std::string level = SettingConfig::getInstance().LOG_LEVEL.toStdString(); if (level == "trace") { m_logger->set_level(spdlog::level::trace); m_logger->flush_on(spdlog::level::trace); } else if (level == "debug") { m_logger->set_level(spdlog::level::debug); m_logger->flush_on(spdlog::level::debug); } else if (level == "info") { m_logger->set_level(spdlog::level::info); m_logger->flush_on(spdlog::level::info); } else if (level == "warn") { m_logger->set_level(spdlog::level::warn); m_logger->flush_on(spdlog::level::warn); } else if (level == "error") { m_logger->set_level(spdlog::level::err); m_logger->flush_on(spdlog::level::err); } } catch (const spdlog::spdlog_ex& ex) { spdlog::error("init log failed: {}",ex.what()); } } std::shared_ptr<spdlog::logger> m_logger; }; #endif // LOGUTIL_H