mirror of
https://github.com/vdemydiuk/mtapi.git
synced 2026-07-28 11:07:48 +00:00
91 lines
2.6 KiB
C++
Executable File
91 lines
2.6 KiB
C++
Executable File
#include "pch.h"
|
|
#include "LogConfigurator.h"
|
|
|
|
#include <boost/log/trivial.hpp>
|
|
#include <boost/log/utility/setup.hpp>
|
|
#include <windows.h>
|
|
|
|
static const std::string DEFAULT_FILE_EXTENSION = ".log";
|
|
|
|
using namespace boost::log;
|
|
|
|
namespace
|
|
{
|
|
trivial::severity_level ToSeverityLevel(LogLevel level)
|
|
{
|
|
switch (level)
|
|
{
|
|
case LogLevel::Fatal:
|
|
return trivial::fatal;
|
|
case LogLevel::Error:
|
|
return trivial::error;
|
|
case LogLevel::Warning:
|
|
return trivial::warning;
|
|
case LogLevel::Info:
|
|
return trivial::info;
|
|
case LogLevel::Debug:
|
|
return trivial::debug;
|
|
case LogLevel::Trace:
|
|
return trivial::trace;
|
|
default:
|
|
assert(false);
|
|
}
|
|
throw;
|
|
}
|
|
|
|
std::string GetTempDirectoryPathImpl()
|
|
{
|
|
std::string tmp_prefix;
|
|
char char_path[MAX_PATH];
|
|
if (auto s = GetTempPathA(MAX_PATH, char_path))
|
|
{
|
|
tmp_prefix = std::string(char_path, std::size_t(s - 1));
|
|
}
|
|
std::replace(tmp_prefix.begin(), tmp_prefix.end(), '\\', '/');
|
|
return tmp_prefix;
|
|
}
|
|
} // namespace
|
|
|
|
void LogConfigurator::Setup(LogLevel level, OutputType output_type,
|
|
const std::string& profile_name)
|
|
{
|
|
if (profile_name.empty())
|
|
throw std::runtime_error("Invalid profile name");
|
|
|
|
static const std::string COMMON_FMT("[%TimeStamp%] [%ThreadID%] [%Severity%] [%ClassName%]: %Message%");
|
|
|
|
register_simple_formatter_factory<trivial::severity_level, char>("Severity");
|
|
|
|
if ((output_type & OutputType::Console) == OutputType::Console)
|
|
{
|
|
// Output message to console
|
|
add_console_log(
|
|
std::cout,
|
|
keywords::format = COMMON_FMT,
|
|
keywords::auto_flush = true);
|
|
}
|
|
|
|
if ((output_type & OutputType::File) == OutputType::File)
|
|
{
|
|
std::string file_name = profile_name;
|
|
file_name += "_%Y%m%d_%2N";
|
|
file_name += DEFAULT_FILE_EXTENSION;
|
|
|
|
std::string file_path = GetTempDirectoryPathImpl() + "\\" + profile_name + "\\" + file_name;
|
|
|
|
// Output message to file, rotates when file reached 1mb or at midnight every day. Each log file
|
|
// is capped at 1mb and total is 20mb
|
|
add_file_log(
|
|
keywords::file_name = file_path,
|
|
keywords::rotation_size = 1 * 1024 * 1024,
|
|
keywords::max_size = 20 * 1024 * 1024,
|
|
keywords::time_based_rotation = sinks::file::rotation_at_time_point(0, 0, 0),
|
|
keywords::format = COMMON_FMT,
|
|
keywords::auto_flush = true);
|
|
}
|
|
|
|
add_common_attributes();
|
|
|
|
core::get()->set_filter(trivial::severity >= ToSeverityLevel(level));
|
|
}
|