#include "loginit.h"

#include "spdlog/spdlog.h"
#include "spdlog/sinks/stdout_color_sinks.h"
#include "spdlog/sinks/daily_file_sink.h"

#include "fmt/base.h"

/* 初始化spdlog */
void init_log()
{
    try {
        /* 创建一个控制台sink */
        auto sink_consolse = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();
        /* 创建一个文件sink,每天一个,00:00创建新的 */
        auto sink_file = std::make_shared<spdlog::sinks::daily_file_sink_mt>("log/log.txt",0,0);
        /* 修改输出格式 */
        sink_consolse->set_pattern("%^[%Y-%m-%d %H:%M:%S] [%n] [%l] %s %#: %v%$");
        sink_file->set_pattern("%^[%Y-%m-%d %H:%M:%S] [%n] [%l] %s %#: %v %$");

        std::vector<spdlog::sink_ptr> sinks;
        sinks.push_back(sink_consolse);
        sinks.push_back(sink_file);

        /* 创建一个标准输出 */
        auto logger_main = std::make_shared<spdlog::logger>("main",begin(sinks),end(sinks));
        /* 创建一个MQTT输出Logger */
        auto logger_MQTT = std::make_shared<spdlog::logger>("MQTT",begin(sinks),end(sinks));
        /* 创建一个线程池输出Logger */
        auto logger_threadPool = std::make_shared<spdlog::logger>("ThreadPool",begin(sinks),end(sinks));

        /* 注册到注册表 */
        spdlog::register_logger(logger_main);
        spdlog::register_logger(logger_MQTT);
        spdlog::register_logger(logger_threadPool);


        /* 设置spdlog输出级别,默认的估计不输出debug这个级别 */
#ifdef C_DEBUG
        spdlog::set_level(spdlog::level::trace);
        spdlog::flush_on(spdlog::level::trace);
#elif C_RELEASE
        spdlog::set_level(spdlog::level::info);
        spdlog::flush_on(spdlog::level::info);
#endif



    //    SPDLOG_LOGGER_DEBUG(logger_main,"******* 有行号且debug也能输出 *******");
    }  catch (const spdlog::spdlog_ex& ex) {
        fmt::print("Log initialization failed: %s\n", ex.what());
    }
}