Program Listing for File Logger.h

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

//
// Created by Aleksey Timin on 11/16/19.
//

#ifndef EIPSCANNER_UTILS_LOGGER_H
#define EIPSCANNER_UTILS_LOGGER_H

#include <sstream>
#include <memory>

#if defined(_WIN32) || defined(WIN32) || defined(_WIN64)
#undef ERROR
#endif

namespace eipScanner {
namespace utils {

    enum class LogLevel {
        OFF = 0,
        ERROR,
        WARNING,
        INFO,
        DEBUG,
        TRACE
    };

    class LogAppenderIf {
    public:
        using UPtr = std::unique_ptr<LogAppenderIf>;
        virtual ~LogAppenderIf() = default;

        virtual void print(LogLevel logLevel, const std::string& msg) = 0;
    };

    class ConsoleAppender : public LogAppenderIf {
    public:
        using UPtr = std::unique_ptr<LogAppenderIf>;
        void print(LogLevel logLevel, const std::string& msg) override;
    };


    class Logger {
    public:
        static void setLogLevel(LogLevel level);

        static void setAppender(LogAppenderIf::UPtr appender);

        Logger(LogLevel level);

        template <typename T>
        std::ostringstream& operator << (T msg) {
            _stream << msg;
            return _stream;
        }

        ~Logger();

    private:
        static LogLevel _globalLogLevel;
        static LogAppenderIf::UPtr _appender;

        LogLevel _logLevel;
        std::ostringstream _stream;
    };
}
}

#endif //EIPSCANNER_LOGGER_H