| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- #include "StdInc.h"
- #include "CLogConsoleTarget.h"
- #include "LogRecord.h"
- CColorMapping::CColorMapping()
- {
- // Set default mappings
- auto & levelMap = map[""];
- levelMap[ELogLevel::TRACE] = EConsoleTextColor::GRAY;
- levelMap[ELogLevel::DEBUG] = EConsoleTextColor::WHITE;
- levelMap[ELogLevel::INFO] = EConsoleTextColor::GREEN;
- levelMap[ELogLevel::WARN] = EConsoleTextColor::YELLOW;
- levelMap[ELogLevel::ERROR] = EConsoleTextColor::RED;
- }
- void CColorMapping::setColorFor(const CLoggerDomain & domain, ELogLevel::ELogLevel level, EConsoleTextColor::EConsoleTextColor color)
- {
- if(level == ELogLevel::NOT_SET) throw std::runtime_error("Log level NOT_SET not allowed for configuring the color mapping.");
- map[domain.getName()][level] = color;
- }
- EConsoleTextColor::EConsoleTextColor CColorMapping::getColorFor(const CLoggerDomain & domain, ELogLevel::ELogLevel level) const
- {
- std::string name = domain.getName();
- while(true)
- {
- const auto & loggerPair = map.find(name);
- if(loggerPair != map.end())
- {
- const auto & levelMap = loggerPair->second;
- const auto & levelPair = levelMap.find(level);
- if(levelPair != levelMap.end())
- {
- return levelPair->second;
- }
- }
- CLoggerDomain currentDomain(name);
- if(!currentDomain.isGlobalDomain())
- {
- name = currentDomain.getParent().getName();
- }
- else
- {
- break;
- }
- }
- throw std::runtime_error("No color mapping found. Should not happen.");
- }
- CLogConsoleTarget::CLogConsoleTarget(CConsoleHandler * console) : console(console), threshold(ELogLevel::INFO), coloredOutputEnabled(true)
- {
- }
- void CLogConsoleTarget::write(const LogRecord & record)
- {
- if(threshold > record.level) return;
- std::string message = formatter.format(record);
- bool printToStdErr = record.level >= ELogLevel::WARN;
- if(console)
- {
- if(coloredOutputEnabled)
- {
- console->print(message, colorMapping.getColorFor(record.domain, record.level));
- }
- else
- {
- console->print(message, EConsoleTextColor::DEFAULT, printToStdErr);
- }
- }
- else
- {
- TLockGuard _(mx);
- if(printToStdErr)
- {
- std::cerr << message << std::flush;
- }
- else
- {
- std::cout << message << std::flush;
- }
- }
- }
- bool CLogConsoleTarget::isColoredOutputEnabled() const
- {
- return coloredOutputEnabled;
- }
- void CLogConsoleTarget::setColoredOutputEnabled(bool coloredOutputEnabled)
- {
- this->coloredOutputEnabled = coloredOutputEnabled;
- }
- ELogLevel::ELogLevel CLogConsoleTarget::getThreshold() const
- {
- return threshold;
- }
- void CLogConsoleTarget::setThreshold(ELogLevel::ELogLevel threshold)
- {
- this->threshold = threshold;
- }
- const CLogFormatter & CLogConsoleTarget::getFormatter() const
- {
- return formatter;
- }
- void CLogConsoleTarget::setFormatter(const CLogFormatter & formatter)
- {
- this->formatter = formatter;
- }
- const CColorMapping & CLogConsoleTarget::getColorMapping() const
- {
- return colorMapping;
- }
- void CLogConsoleTarget::setColorMapping(const CColorMapping & colorMapping)
- {
- this->colorMapping = colorMapping;
- }
|