Program Listing for File Logger.cpp

Return to documentation for file (src/utils/Logger.cpp)

//
// Created by Aleksey Timin on 11/16/19.
//
#include <iostream>
#include <map>

#include "Logger.h"

namespace eipScanner {
namespace utils {
    LogLevel Logger::_globalLogLevel = LogLevel::INFO;
    LogAppenderIf::UPtr Logger::_appender = std::make_unique<ConsoleAppender>();

    Logger::Logger(LogLevel logLevel): _logLevel{logLevel} {

    }

    Logger::~Logger() {
        if (_globalLogLevel != LogLevel::OFF && _logLevel <= _globalLogLevel) {
            _appender->print(_logLevel, (_stream).str());
        }
    }

    void Logger::setLogLevel(LogLevel level) {
        _globalLogLevel = level;
    }

    void Logger::setAppender(LogAppenderIf::UPtr appender) {
        _appender = std::move(appender);
    }

    void ConsoleAppender::print(LogLevel logLevel,const std::string &msg) {
        const static std::map<LogLevel, std::string> LOGLEVEL_NAMES = {
                std::make_pair(LogLevel::TRACE, "[TRACE] "),
                std::make_pair(LogLevel::DEBUG, "[DEBUG] "),
                std::make_pair(LogLevel::INFO, "[INFO] "),
                std::make_pair(LogLevel::WARNING, "[WARNING] "),
                std::make_pair(LogLevel::ERROR, "[ERROR] "),
        };

        std::cout << LOGLEVEL_NAMES.at(logLevel) << msg << std::endl;
    }
}
}