LogOutput.cpp 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. #include "LogOutput.h"
  2. #include <spdlog/sinks/stdout_sinks.h>
  3. #include <spdlog/sinks/basic_file_sink.h>
  4. #include <spdlog/sinks/null_sink.h>
  5. #include <fstream>
  6. #include <json.hpp>
  7. // console 0
  8. // file 1
  9. // console and file 2
  10. // null 3
  11. // trace 0
  12. // debug 1
  13. // info 2
  14. // warn 3
  15. // err 4
  16. // critical 5
  17. // off 6
  18. // n_levels 7
  19. LogOutput::LogOutput(std::string instance, LogConfiguration LogConfig)
  20. {
  21. InitLog(instance, LogConfig);
  22. }
  23. LogOutput::LogOutput()
  24. {
  25. }
  26. LogOutput::~LogOutput()
  27. {
  28. }
  29. bool LogOutput::E_File(bool isOpen, std::string FileName)
  30. {
  31. if (!isOpen)
  32. {
  33. log_sink->error(util::Format("{0} file not found", FileName));
  34. }
  35. return isOpen;
  36. }
  37. bool LogOutput::W_File(bool isOpen, std::string FileName)
  38. {
  39. if (!isOpen)
  40. {
  41. log_sink->warn(util::Format("{0} file not found", FileName));
  42. }
  43. return isOpen;
  44. }
  45. void LogOutput::InitLog(std::string instance, LogConfiguration LogConfig)
  46. {
  47. auto console_sink = std::make_shared<spdlog::sinks::stdout_sink_st>();
  48. auto file_sink = std::make_shared<spdlog::sinks::basic_file_sink_st>(LogConfig.fileOut_v, false);
  49. auto null_sink = std::make_shared<spdlog::sinks::null_sink_st>();
  50. console_sink->set_level(spdlog::level::level_enum(LogConfig.level_v));
  51. file_sink->set_level(spdlog::level::level_enum(LogConfig.level_v));
  52. console_sink->set_pattern(LogConfig.pattern_v);
  53. file_sink->set_pattern(LogConfig.pattern_v);
  54. switch (LogConfig.sink_v)
  55. {
  56. case 0:
  57. log_sink = new spdlog::logger(instance, {console_sink});
  58. break;
  59. case 1:
  60. log_sink = new spdlog::logger(instance, {file_sink});
  61. break;
  62. case 2:
  63. log_sink = new spdlog::logger(instance, {file_sink, console_sink});
  64. break;
  65. case 3:
  66. log_sink = new spdlog::logger(instance, {null_sink});
  67. break;
  68. }
  69. log_sink->flush_on(spdlog::level::info);
  70. }
  71. bool LogConfiguration::FromFile(std::string file_path)
  72. {
  73. std::ifstream logConfig(file_path);
  74. if (logConfig.is_open())
  75. {
  76. nlohmann::json logJson;
  77. logConfig >> logJson;
  78. if (logJson.contains("sink"))
  79. {
  80. sink_v = logJson["sink"];
  81. }
  82. if (logJson.contains("fileOut"))
  83. {
  84. fileOut_v = logJson["fileOut"];
  85. }
  86. if (logJson.contains("level"))
  87. {
  88. level_v = logJson["level"];
  89. }
  90. if (logJson.contains("pattern"))
  91. {
  92. pattern_v = logJson["pattern"];
  93. }
  94. logConfig.close();
  95. return true;
  96. }
  97. else
  98. {
  99. return false;
  100. }
  101. }