logger.cpp

cross platform rendering playground

src/core/logger.cpp

1.71 KB
#include "logger.h"

#include <plog/Appenders/ColorConsoleAppender.h>
#include <plog/Appenders/DynamicAppender.h>
#include <plog/Appenders/RollingFileAppender.h>
#include <plog/Formatters/TxtFormatter.h>
#include <plog/Init.h>
#include <plog/Record.h>

namespace vel {

namespace {

plog::ColorConsoleAppender<plog::TxtFormatter> CONSOLE_APPENDER;
plog::RollingFileAppender<plog::TxtFormatter> FILE_APPENDER("logs/vel-renderer.log", 1024 * 1024 * 5, 3);
plog::DynamicAppender APPENDERS;
bool INITIALIZED = false;

plog::Severity to_plog_severity(VelLogLevel level) {
    switch (level) {
    case VelLogLevel::Trace:
        return plog::verbose;
    case VelLogLevel::Debug:
        return plog::debug;
    case VelLogLevel::Info:
        return plog::info;
    case VelLogLevel::Warn:
        return plog::warning;
    case VelLogLevel::Error:
        return plog::error;
    case VelLogLevel::Critical:
        return plog::fatal;
    }

    return plog::none;
}

} // namespace

void Logger::init() {
    if (INITIALIZED) {
        return;
    }

    APPENDERS.addAppender(&FILE_APPENDER);
    APPENDERS.addAppender(&CONSOLE_APPENDER);
    plog::init(plog::verbose, &APPENDERS);
    INITIALIZED = true;
}

void Logger::shutdown() {
    if (plog::Logger<PLOG_DEFAULT_INSTANCE_ID> *logger = plog::get()) {
        logger->setMaxSeverity(plog::none);
    }

    INITIALIZED = false;
}

void Logger::log(VelLogLevel level, const char *file, std::size_t line, const std::string &message) {
    if (plog::Logger<PLOG_DEFAULT_INSTANCE_ID> *logger = plog::get()) {
        plog::Record record(to_plog_severity(level), "", line, file, nullptr, PLOG_DEFAULT_INSTANCE_ID);
        record << message;
        logger->write(record);
    }
}

} // namespace vel