danicoin/src/Logging/CommonLogger.cpp
2016-01-18 15:33:29 +00:00

87 lines
2 KiB
C++
Executable file

// Copyright (c) 2011-2016 The Cryptonote developers
// Distributed under the MIT/X11 software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
#include "CommonLogger.h"
namespace Logging {
namespace {
std::string formatPattern(const std::string& pattern, const std::string& category, Level level, boost::posix_time::ptime time) {
std::stringstream s;
for (const char* p = pattern.c_str(); p && *p != 0; ++p) {
if (*p == '%') {
++p;
switch (*p) {
case 0:
break;
case 'C':
s << category;
break;
case 'D':
s << time.date();
break;
case 'T':
s << time.time_of_day();
break;
case 'L':
s << ILogger::LEVEL_NAMES[level];
break;
default:
s << *p;
}
} else {
s << *p;
}
}
return s.str();
}
}
void CommonLogger::operator()(const std::string& category, Level level, boost::posix_time::ptime time, const std::string& body) {
if (level <= logLevel && disabledCategories.count(category) == 0) {
std::string body2 = body;
if (!pattern.empty()) {
size_t insertPos = 0;
if (!body2.empty() && body2[0] == ILogger::COLOR_DELIMETER) {
size_t delimPos = body2.find(ILogger::COLOR_DELIMETER, 1);
if (delimPos != std::string::npos) {
insertPos = delimPos + 1;
}
}
body2.insert(insertPos, formatPattern(pattern, category, level, time));
}
doLogString(body2);
}
}
void CommonLogger::setPattern(const std::string& pattern) {
this->pattern = pattern;
}
void CommonLogger::enableCategory(const std::string& category) {
disabledCategories.erase(category);
}
void CommonLogger::disableCategory(const std::string& category) {
disabledCategories.insert(category);
}
void CommonLogger::setMaxLevel(Level level) {
logLevel = level;
}
CommonLogger::CommonLogger(Level level) : logLevel(level), pattern("%D %T %L [%C] ") {
}
void CommonLogger::doLogString(const std::string& message) {
}
}