#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