CBasicLogConfigurator.cpp 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. #include "StdInc.h"
  2. #include "CBasicLogConfigurator.h"
  3. #include "../CConfigHandler.h"
  4. #include "CLogConsoleTarget.h"
  5. #include "CLogFileTarget.h"
  6. CBasicLogConfigurator::CBasicLogConfigurator(const std::string & filePath, CConsoleHandler * console)
  7. {
  8. const JsonNode & logging = settings["logging"];
  9. // Configure loggers
  10. const JsonNode & loggers = logging["loggers"];
  11. if(!loggers.isNull())
  12. {
  13. BOOST_FOREACH(auto & loggerPair, loggers.Struct())
  14. {
  15. // Get logger
  16. std::string name = loggerPair.first;
  17. CGLogger * logger = CGLogger::getLogger(name);
  18. // Set log level
  19. const JsonNode & loggerNode = loggerPair.second;
  20. const JsonNode & levelNode = loggerNode["level"];
  21. if(!levelNode.isNull())
  22. {
  23. logger->setLevel(getLogLevel(levelNode.String()));
  24. }
  25. }
  26. }
  27. // Add console target
  28. CLogConsoleTarget * consoleTarget = new CLogConsoleTarget(console);
  29. const JsonNode & consoleNode = logging["console"];
  30. if(!consoleNode.isNull())
  31. {
  32. const JsonNode & consoleFormatNode = consoleNode["format"];
  33. if(!consoleFormatNode.isNull()) consoleTarget->setFormatter(CLogFormatter(consoleFormatNode.String()));
  34. const JsonNode & consoleThresholdNode = consoleNode["threshold"];
  35. if(!consoleThresholdNode.isNull()) consoleTarget->setThreshold(getLogLevel(consoleThresholdNode.String()));
  36. const JsonNode & coloredConsoleEnabledNode = consoleNode["coloredOutputEnabled"];
  37. consoleTarget->setColoredOutputEnabled(coloredConsoleEnabledNode.Bool());
  38. CColorMapping colorMapping;
  39. const JsonNode & colorMappingNode = consoleNode["colorMapping"];
  40. if(!colorMappingNode.isNull())
  41. {
  42. BOOST_FOREACH(const JsonNode & mappingNode, colorMappingNode.Vector())
  43. {
  44. std::string domain = mappingNode["domain"].String();
  45. std::string level = mappingNode["level"].String();
  46. std::string color = mappingNode["color"].String();
  47. colorMapping.setColorFor(domain, getLogLevel(level), getConsoleColor(color));
  48. }
  49. }
  50. consoleTarget->setColorMapping(colorMapping);
  51. }
  52. CGLogger::getGlobalLogger()->addTarget(consoleTarget);
  53. // Add file target
  54. CLogFileTarget * fileTarget = new CLogFileTarget(filePath);
  55. const JsonNode & fileNode = logging["file"];
  56. if(!fileNode.isNull())
  57. {
  58. const JsonNode & fileFormatNode = fileNode["format"];
  59. if(!fileFormatNode.isNull()) fileTarget->setFormatter(CLogFormatter(fileFormatNode.String()));
  60. }
  61. // Add targets to the root logger by default
  62. CGLogger::getGlobalLogger()->addTarget(consoleTarget);
  63. CGLogger::getGlobalLogger()->addTarget(fileTarget);
  64. }
  65. ELogLevel::ELogLevel CBasicLogConfigurator::getLogLevel(const std::string & level) const
  66. {
  67. static const std::map<std::string, ELogLevel::ELogLevel> levelMap = boost::assign::map_list_of
  68. ("trace", ELogLevel::TRACE)
  69. ("debug", ELogLevel::DEBUG)
  70. ("info", ELogLevel::INFO)
  71. ("warn", ELogLevel::WARN)
  72. ("error", ELogLevel::ERROR);
  73. const auto & levelPair = levelMap.find(level);
  74. if(levelPair != levelMap.end())
  75. {
  76. return levelPair->second;
  77. }
  78. else
  79. {
  80. throw std::runtime_error("Log level " + level + " unknown.");
  81. }
  82. }
  83. EConsoleTextColor::EConsoleTextColor CBasicLogConfigurator::getConsoleColor(const std::string & colorName) const
  84. {
  85. static const std::map<std::string, EConsoleTextColor::EConsoleTextColor> colorMap = boost::assign::map_list_of
  86. ("default", EConsoleTextColor::DEFAULT)
  87. ("green", EConsoleTextColor::GREEN)
  88. ("red", EConsoleTextColor::RED)
  89. ("magenta", EConsoleTextColor::MAGENTA)
  90. ("yellow", EConsoleTextColor::YELLOW)
  91. ("white", EConsoleTextColor::WHITE)
  92. ("gray", EConsoleTextColor::GRAY)
  93. ("teal", EConsoleTextColor::TEAL);
  94. const auto & colorPair = colorMap.find(colorName);
  95. if(colorPair != colorMap.end())
  96. {
  97. return colorPair->second;
  98. }
  99. else
  100. {
  101. throw std::runtime_error("Color " + colorName + " unknown.");
  102. }
  103. }