// // Created by zhaohe on 19-5-31. // #pragma once #include #include #include #include #include #include #include #include #include // #include "spdlog/spdlog.h" // #include "spdlog/sinks/basic_file_sink.h" #include "spdlog/sinks/daily_file_sink.h" #include "spdlog/sinks/rotating_file_sink.h" #include "spdlog/sinks/stdout_color_sinks.h" namespace iflytop { namespace core { using namespace std; using namespace spdlog; typedef shared_ptr logger_t; #define ENABLE_LOGGER(loggerName) \ public: \ iflytop::core::logger_t logger = iflytop::core::SpdLoggerFactory::Instance().createLogger(#loggerName); \ \ private: #define CREATE_LOGGER(loggerName) iflytop::core::SpdLoggerFactory::Instance().createLogger(#loggerName) #define GET_LOGGER(loggerName) iflytop::core::SpdLoggerFactory::Instance().createLogger(#loggerName) #define GET_SINK(sinkName) iflytop::core::SpdLoggerFactory::Instance().getSink(sinkName) #define LoggerFactory iflytop::core::SpdLoggerFactory::Instance() class SpdLoggerFactory { SpdLoggerFactory() {}; std::mutex createLogger_lock; atomic_bool initializeLogger = {false}; set s_loggerNames; public: static SpdLoggerFactory &Instance() { static SpdLoggerFactory factory; return factory; } void initialize(); shared_ptr createLogger(string loggerName); set loggerNames(); shared_ptr createRotatingFileLogger(const std::string &logger_name, size_t max_file_size = 5 * 1024 * 1024 /*5M*/, size_t max_files = 3, bool bindTerminal = true, bool bindDebug = true, bool bindInfo = true); sink_ptr getSink(string name); private: void parseSphLogConfig(string path); }; } // namespace core } // namespace iflytop