#include "log.h" // std using namespace osdev::components::mqtt; namespace { std::string toString( LogLevel level ) { switch (level) { case LogLevel::Trace: return "T"; case LogLevel::Debug: return "D"; case LogLevel::Info: return "I"; case LogLevel::Warning: return "W"; case LogLevel::Error: return "E"; } return "U"; } } // namespace const std::string Log::s_startMarker = std::string("|________________________________________________________________________________________________________________________________|"); std::string Log::s_context = std::string(); std::string Log::s_fileName = std::string(); LogLevel Log::s_logLevel = LogLevel::Info; void Log::init( const std::string &context, const std::string &logFile, LogLevel logDepth ) { s_logLevel = logDepth; s_context = context; if( !logFile.empty()) { s_fileName = logFile; } } void Log::terminate() { s_context.clear(); s_fileName.clear(); s_logLevel = LogLevel::Info; } void Log::log( const std::string &category, const std::string &message, LogLevel level ) { std::string logCategory = s_context + '|' + toString( level ) + '|' + ThreadContext::instance().context() + '|' + category; std::string logMessage = message; if( logMessage.empty() ) { static const std::string emptyMessage( "--" ); logMessage = emptyMessage; } else { // Replace % signs logMessage.replace( '%', "%%"); } writeLog( logCategory, logMessage, level ); }