loginit.cpp 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #include "loginit.h"
  2. #include "spdlog/spdlog.h"
  3. #include "spdlog/sinks/stdout_color_sinks.h"
  4. #include "spdlog/sinks/daily_file_sink.h"
  5. // #include "fmt/base.h"
  6. /* 初始化spdlog */
  7. void init_log()
  8. {
  9. try
  10. {
  11. /* 给默认记录器用的sink */
  12. auto sink_default = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();
  13. /* 创建一个控制台sink */
  14. auto sink_consolse = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();
  15. /* 创建一个文件sink,每天一个,00:00创建新的 */
  16. auto sink_file = std::make_shared<spdlog::sinks::daily_file_sink_mt>("log/log.txt", 0, 0);
  17. /* 修改输出格式 */
  18. #if C_DEBUG
  19. sink_default->set_pattern("%^[%Y-%m-%d %H:%M:%S:%e] [%l] [%s %#] %v %$");
  20. sink_consolse->set_pattern("%^[%Y-%m-%d %H:%M:%S:%e] [%l] [%n] [%s %#] %v %$");
  21. sink_file->set_pattern("%^[%Y-%m-%d %H:%M:%S:%e] [%l] [%n] [%s %#] %v %$");
  22. #elif C_RELEASE
  23. // sink_default->set_pattern("%^[%Y-%m-%d %H:%M:%S:%e] [%l] %v %$");
  24. // sink_consolse->set_pattern("%^[%Y-%m-%d %H:%M:%S:%e] [%l] [%n] %v %$");
  25. // sink_file->set_pattern("%^[%Y-%m-%d %H:%M:%S:%e] [%l] [%n] %v %$");
  26. sink_default->set_pattern("%^[%Y-%m-%d %H:%M:%S:%e] [%l] [%s %#] %v %$");
  27. sink_consolse->set_pattern("%^[%Y-%m-%d %H:%M:%S:%e] [%l] [%n] [%s %#] %v %$");
  28. sink_file->set_pattern("%^[%Y-%m-%d %H:%M:%S:%e] [%l] [%n] [%s %#] %v %$");
  29. #endif
  30. /* 设置默认日志记录器,设置成自定义的sink */
  31. spdlog::default_logger()->sinks().clear();
  32. spdlog::default_logger()->sinks().push_back(sink_default);
  33. spdlog::default_logger()->sinks().push_back(sink_file);
  34. /* 创建sink数组 */
  35. std::vector<spdlog::sink_ptr> sinks;
  36. sinks.push_back(sink_consolse);
  37. sinks.push_back(sink_file);
  38. /* 创建一个标准输出 */
  39. auto logger_main = std::make_shared<spdlog::logger>("main",begin(sinks),end(sinks));
  40. /* 创建一个MQTT输出Logger */
  41. auto logger_MQTT = std::make_shared<spdlog::logger>("MQTT",begin(sinks),end(sinks));
  42. /* 创建一个线程池输出Logger */
  43. auto logger_threadPool = std::make_shared<spdlog::logger>("ThreadPool",begin(sinks),end(sinks));
  44. /* 注册到注册表 */
  45. spdlog::register_logger(logger_main);
  46. spdlog::register_logger(logger_MQTT);
  47. spdlog::register_logger(logger_threadPool);
  48. /* 设置spdlog输出级别,默认的估计不输出debug这个级别 */
  49. #ifdef C_DEBUG
  50. spdlog::set_level(spdlog::level::trace);
  51. spdlog::flush_on(spdlog::level::trace);
  52. #elif C_RELEASE
  53. spdlog::set_level(spdlog::level::info);
  54. spdlog::flush_on(spdlog::level::info);
  55. #endif
  56. // SPDLOG_LOGGER_DEBUG(logger_main,"******* 有行号且debug也能输出 *******");
  57. } catch (const spdlog::spdlog_ex& ex) {
  58. fmt::print("Log initialization failed: %s\n", ex.what());
  59. }
  60. }