g1g2hardwarechecker/Log/applog.cpp

115 lines
2.7 KiB
C++
Raw Permalink Normal View History

#include "applog.h"
#include "spdlog/spdlog.h"
#include "spdlog/async.h"
#include "spdlog/sinks/stdout_color_sinks.h"
#include "spdlog/sinks/basic_file_sink.h"
#include "spdlog/sinks/rotating_file_sink.h"
#include "stringex.h"
#include <iostream>
#include <algorithm>
inline std::string string_toupper(const std::string& str)
{
std::string s = str;
transform(s.begin(), s.end(), s.begin(), toupper);
return s;
}
void log_init(const std::string& name, bool benv)
{
if(spdlog::get(name))
return;
const auto max_size = 1048576 * 5;
const auto max_files = 3;
auto file_sink = std::make_shared<spdlog::sinks::rotating_file_sink_mt>("logs/"+name+".log", max_size, max_files);
file_sink->set_level(spdlog::level::info);
auto logger = std::shared_ptr<spdlog::logger>(new spdlog::logger("logs/" + name+".log", {file_sink}));
spdlog::register_logger(logger);
}
void log_info(const std::string& name, const std::string& msg)
{
if(auto log = spdlog::get("logs/" + name + ".log"))
{
log->info(msg);
log->flush();
}
}
void log_warn(const std::string& name, const std::string& msg)
{
if (auto log = spdlog::get("logs/" + name + ".log"))
{
log->warn(msg);
log->flush();
}
}
void log_trace(const std::string& name, const std::string& msg)
{
if (auto log = spdlog::get("logs/" + name + ".log"))
{
log->trace(msg);
log->flush();
}
}
void log_debug(const std::string& name, const std::string& msg)
{
if (auto log = spdlog::get("logs/" + name + ".log"))
{
log->debug(msg);
log->flush();
}
}
void log_error(const std::string& name, const std::string& msg)
{
if (auto log = spdlog::get("logs/" + name + ".log"))
{
log->error(msg);
log->flush();
}
}
void log_critical(const std::string name, const std::string& msg)
{
if (auto log = spdlog::get("logs/" + name + ".log"))
{
log->critical(msg);
log->flush();
}
}
bool log_set_level(const std::string& name, int type ,int level)
{
if (auto log = spdlog::get("logs/" + name + ".log"))
{
spdlog::level::level_enum actLevel = (spdlog::level::level_enum)std::min(std::max((int)spdlog::level::trace, level), (int)spdlog::level::off);
if(type < log->sinks().size())
log->sinks()[type]->set_level(actLevel);
else
log->set_level(actLevel);
return true;
}
return false;
}
bool log_get_level(const std::string& name, int type ,int& level)
{
if (auto log = spdlog::get("logs/" + name + ".log"))
{
if(type < log->sinks().size())
level = log->sinks()[type]->level();
else
level = log->level();
return true;
}
return false;
}