rk3399_arm_lvds/applog/applog.cpp

121 lines
3.2 KiB
C++

#include "applog.h"
#include "spdlog/spdlog.h"
#include "spdlog/sinks/stdout_color_sinks.h"
#include "spdlog/sinks/basic_file_sink.h"
#include "spdlog/sinks/rotating_file_sink.h"
#include "stringex.hpp"
#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 console_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();
char *pathvar = getenv(("APP_" + string_toupper(name) + "_CONSOLE_LOG").c_str());
console_sink->set_level(pathvar ? std::min(spdlog::level::from_str(pathvar), spdlog::level::off) : spdlog::level::off);
auto file_sink = std::make_shared<spdlog::sinks::rotating_file_sink_mt>("app.log", max_size, max_files);
pathvar = getenv(("APP_" + string_toupper(name) + "_FILE_LOG").c_str());
file_sink->set_level(pathvar ? std::min(spdlog::level::from_str(pathvar), spdlog::level::off) : spdlog::level::off);
auto logger = std::shared_ptr<spdlog::logger>(new spdlog::logger(name, {console_sink, file_sink}));
pathvar = getenv(("APP_" + string_toupper(name) + "_LOG").c_str());
logger->set_level(pathvar ? std::min(spdlog::level::from_str(pathvar), spdlog::level::off) : spdlog::level::off);
spdlog::register_logger(logger);
}
void log_info(const std::string& name, const std::string& msg)
{
if(auto log = spdlog::get(name))
{
log->info(msg);
log->flush();
}
}
void log_warn(const std::string& name, const std::string& msg)
{
if (auto log = spdlog::get(name))
{
log->warn(msg);
log->flush();
}
}
void log_trace(const std::string& name, const std::string& msg)
{
if (auto log = spdlog::get(name))
{
log->trace(msg);
log->flush();
}
}
void log_debug(const std::string& name, const std::string& msg)
{
if (auto log = spdlog::get(name))
{
log->debug(msg);
log->flush();
}
}
void log_error(const std::string& name, const std::string& msg)
{
if (auto log = spdlog::get(name))
{
log->error(msg);
log->flush();
}
}
void log_critical(const std::string name, const std::string& msg)
{
if (auto log = spdlog::get(name))
{
log->critical(msg);
log->flush();
}
}
bool log_set_level(const std::string& name, int type ,int level)
{
if (auto log = spdlog::get(name))
{
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(name))
{
if(type < log->sinks().size())
level = log->sinks()[type]->level();
else
level = log->level();
return true;
}
return false;
}