LHLogInit.cpp 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. #include "LHLogInit.h"
  2. #include "spdlog/spdlog.h"
  3. #include "spdlog/sinks/stdout_color_sinks.h"
  4. #include "LHLog_file_sink.h"
  5. #include <QString>
  6. #include <QApplication>
  7. /* 初始化spdlog,输入的是模组名称,可以为空 */
  8. void initLog(QString ModuleName)
  9. {
  10. try {
  11. /* 创建一个控制台sink */
  12. auto sink_consolse = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();
  13. /* 创建一个文件sink,每天一个,00:00创建新的 */
  14. // auto sink_file = std::make_shared<spdlog::sinks::daily_file_sink_mt>("FlowChartLog/log.txt",0,0);
  15. /* 自定义的sink */
  16. #if C_DEBUG
  17. QString libName = QCoreApplication::applicationDirPath() + "/LHQLogd.dll";
  18. #elif C_RELEASE
  19. QString libName = QCoreApplication::applicationDirPath() + "/LHQLog.dll";
  20. #endif
  21. auto sink_custom = std::make_shared<spdlog::sinks::LHLog_file_sink_mt>(&g_apiLhQLog, libName, ModuleName);
  22. /* 给默认记录器用的sink */
  23. auto sink_default = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();
  24. /* 修改输出格式 */
  25. sink_consolse->set_pattern("%^[%Y-%m-%d %H:%M:%S] [%l] [%n] [%s %#] %v %$");
  26. // sink_file->set_pattern("[%Y-%m-%d %H:%M:%S] [%^%n%$] [%^%l%$] %s %#: %v");
  27. sink_custom->set_pattern("%v");
  28. sink_default->set_pattern("%^[%Y-%m-%d %H:%M:%S] [%l] [%s %#] %v %$");
  29. /* 日志输出方向,终端和文件 */
  30. std::vector<spdlog::sink_ptr> sinks;
  31. sinks.push_back(sink_consolse);
  32. // sinks.push_back(sink_file);
  33. sinks.push_back(sink_custom);
  34. /* 设置默认日志记录器,设置成自定义的sink */
  35. spdlog::default_logger()->sinks().clear();
  36. spdlog::default_logger()->sinks().push_back(sink_default);
  37. spdlog::default_logger()->sinks().push_back(sink_custom);
  38. // auto vecSinks = spdlog::default_logger()->sinks();
  39. // for(auto& sink : vecSinks)
  40. // {
  41. // SPDLOG_INFO("sink name = {}", typeid(*sink).name());
  42. // }
  43. /* 创建一个标准输出 */
  44. auto logger_main = std::make_shared<spdlog::logger>("main",begin(sinks),end(sinks));
  45. /* 创建一个Line输出Logger */
  46. auto logger_Line = std::make_shared<spdlog::logger>("Line",begin(sinks),end(sinks));
  47. /* 创建一个Device输出Logger */
  48. auto logger_Device = std::make_shared<spdlog::logger>("Device",begin(sinks),end(sinks));
  49. /* 创建一个FlowChart logger */
  50. auto logger_FlowChart = std::make_shared<spdlog::logger>("FlowChart",begin(sinks),end(sinks));
  51. /* 创建一个Database logger */
  52. auto logger_Database = std::make_shared<spdlog::logger>("Database",begin(sinks),end(sinks));
  53. /* 创建一个MQTT logger */
  54. auto logger_MQTT = std::make_shared<spdlog::logger>("MQTT",begin(sinks),end(sinks));
  55. // /* 创建一个设备Info logger */
  56. // auto logger_Info = std::make_shared<spdlog::logger>("DevInfo",begin(sinks),end(sinks));
  57. /* 注册到注册表 */
  58. spdlog::register_logger(logger_main);
  59. spdlog::register_logger(logger_Line);
  60. spdlog::register_logger(logger_Device);
  61. spdlog::register_logger(logger_FlowChart);
  62. spdlog::register_logger(logger_Database);
  63. spdlog::register_logger(logger_MQTT);
  64. /* 设置spdlog输出级别,默认的估计不输出debug这个级别
  65. * 这是默认的设置,可以在外面单数设置输出方式
  66. * release模式下不输出console的日志输出
  67. * */
  68. #if defined (C_DEBUG)
  69. spdlog::set_level(spdlog::level::trace);
  70. spdlog::flush_on(spdlog::level::trace);
  71. #elif defined(C_RELEASE)
  72. spdlog::set_level(spdlog::level::info); /* 只输出info以上的输出 */
  73. spdlog::flush_on(spdlog::level::info); /* 设置刷新等级 */
  74. sink_consolse->set_level(spdlog::level::off); /* 控制台不输出 */
  75. sink_default->set_level(spdlog::level::off); /* 默认sink也不输出 */
  76. #endif
  77. // SPDLOG_LOGGER_DEBUG(logger_main,"******* 有行号且debug也能输出 *******");
  78. }
  79. catch (const spdlog::spdlog_ex& ex) {
  80. qDebug() << "Log initialization failed: " << ex.what() ;
  81. }
  82. }