#ifndef SPDLOGUTIL_H #define SPDLOGUTIL_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(SpdLogUtil::getInstance()->getLogger().get(), spdlog::level::trace, __VA_ARGS__) #define LOG_DEBUG(...) SPDLOG_LOGGER_CALL(SpdLogUtil::getInstance()->getLogger().get(), spdlog::level::debug, __VA_ARGS__) #define LOG_INFO(...) SPDLOG_LOGGER_CALL(SpdLogUtil::getInstance()->getLogger().get(), spdlog::level::info, __VA_ARGS__) #define LOG_WARN(...) SPDLOG_LOGGER_CALL(SpdLogUtil::getInstance()->getLogger().get(), spdlog::level::warn, __VA_ARGS__) #define LOG_ERROR(...) SPDLOG_LOGGER_CALL(SpdLogUtil::getInstance()->getLogger().get(), spdlog::level::err, __VA_ARGS__) class SpdLogUtil { public: ~SpdLogUtil() { spdlog::drop_all(); } SpdLogUtil(const SpdLogUtil&)=delete; SpdLogUtil& operator=(const SpdLogUtil&)=delete; //禁止生成默认赋值函数 // magic singleton static static SpdLogUtil* getInstance() { static SpdLogUtil instance; return &instance; } std::shared_ptr<spdlog::logger> getLogger() { return m_logger; } private: SpdLogUtil() { try { // Create a daily logger - a new file is created every day on 00:00am m_logger = spdlog::daily_logger_mt("CasicBioRec", 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 // SPDLOGUTIL_H