123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- #include "LHLogInit.h"
- #include "spdlog/spdlog.h"
- #include "spdlog/sinks/stdout_color_sinks.h"
- #include "LHLog_file_sink.h"
- #include <string>
- #include <filesystem>
- /* 初始化spdlog,输入的是模组名称,可以为空
- * lhQLog是一个全局函数,在库LHQLog中定义
- * 这里获取可执行文件文件夹的路径,使用的是C++17新引入的特性
- * GCC9会在标准库中,GCC8.3需要手动链接库stdc++fs才可以使用
- */
- void initLog(QString ModuleName, CLHQLogApi& lhQLog)
- {
- 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>("FlowChartLog/log.txt",0,0);
- /* 自定义的sink */
- std::filesystem::path execPath = std::filesystem::current_path();
- #if defined(Q_OS_WIN32)
- #if C_DEBUG
- std::string libName = execPath.string() + "/LHQLogd.dll";
- #elif C_RELEASE
- std::string libName = execPath.string() + "/LHQLog.dll";
- #endif
- #elif defined(Q_OS_LINUX)
- std::string libName = execPath.string() + "/libLHQLog.so";
- #endif
- auto sink_custom = std::make_shared<spdlog::sinks::LHLog_file_sink_mt>(&lhQLog, QString(libName.c_str()), ModuleName);
- /* 给默认记录器用的sink */
- auto sink_default = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();
-
- /* 修改输出格式 */
- sink_consolse->set_pattern("%^[%Y-%m-%d %H:%M:%S] [%l] [%n] [%s %#] %v %$");
- // sink_file->set_pattern("[%Y-%m-%d %H:%M:%S] [%^%n%$] [%^%l%$] %s %#: %v");
- sink_custom->set_pattern("%v");
- sink_default->set_pattern("%^[%Y-%m-%d %H:%M:%S] [%l] [%s %#] %v %$");
- /* 日志输出方向,终端和文件 */
- std::vector<spdlog::sink_ptr> sinks;
- sinks.push_back(sink_consolse);
- // sinks.push_back(sink_file);
- sinks.push_back(sink_custom);
- /* 设置默认日志记录器,设置成自定义的sink */
- spdlog::default_logger()->sinks().clear();
- spdlog::default_logger()->sinks().push_back(sink_default);
- spdlog::default_logger()->sinks().push_back(sink_custom);
- // auto vecSinks = spdlog::default_logger()->sinks();
- // for(auto& sink : vecSinks)
- // {
- // SPDLOG_INFO("sink name = {}", typeid(*sink).name());
- // }
- /* 创建一个标准输出 */
- auto logger_main = std::make_shared<spdlog::logger>("main",begin(sinks),end(sinks));
- /* 创建一个WebAPI logger */
- auto logger_WebAPI = std::make_shared<spdlog::logger>("WebAPI",begin(sinks),end(sinks));
- /* 创建一个发射机通用 Logger */
- auto logger_SuperBrain = std::make_shared<spdlog::logger>("SuperBrain",begin(sinks),end(sinks));
- /* 注册到注册表 */
- spdlog::register_logger(logger_main);
- spdlog::register_logger(logger_WebAPI);
- spdlog::register_logger(logger_SuperBrain);
- /* 设置spdlog输出级别,默认的估计不输出debug这个级别
- * 这是默认的设置,可以在外面单数设置输出方式
- * release模式下不输出console的日志输出
- * */
- #if defined (C_DEBUG)
- spdlog::set_level(spdlog::level::trace);
- spdlog::flush_on(spdlog::level::trace);
- #elif defined(C_RELEASE)
- spdlog::set_level(spdlog::level::info); /* 只输出info以上的输出 */
- spdlog::flush_on(spdlog::level::info); /* 设置刷新等级 */
- sink_consolse->set_level(spdlog::level::off); /* 控制台不输出 */
- sink_default->set_level(spdlog::level::off); /* 默认sink也不输出 */
- #endif
- // SPDLOG_LOGGER_DEBUG(logger_main,"******* 有行号且debug也能输出 *******");
- }
- catch (const spdlog::spdlog_ex& ex) {
- qDebug() << "Log initialization failed: " << ex.what() ;
- }
- }
|