File indexing completed on 2024-09-27 07:03:08
0001
0002
0003
0004
0005 #include "Log_service.h"
0006
0007 #include <JANA/JException.h>
0008 #include <spdlog/spdlog.h>
0009 #include <exception>
0010
0011 #include "extensions/spdlog/SpdlogExtensions.h"
0012
0013
0014 Log_service::Log_service(JApplication *app) {
0015
0016
0017 m_application = app;
0018
0019 m_log_level_str = "info";
0020 m_application->SetDefaultParameter("eicrecon:LogLevel", m_log_level_str, "log_level: trace, debug, info, warn, error, critical, off");
0021 spdlog::default_logger()->set_level(eicrecon::ParseLogLevel(m_log_level_str));
0022
0023 m_log_format_str = "[%n] [%^%l%$] %v";
0024 m_application->SetDefaultParameter("eicrecon:LogFormat", m_log_level_str, "spdlog pattern string");
0025 spdlog::set_pattern(m_log_format_str);
0026 }
0027
0028
0029
0030
0031 Log_service::~Log_service() {};
0032
0033
0034 std::shared_ptr<spdlog::logger> Log_service::logger(
0035 const std::string &name,
0036 const std::optional<level> default_level) {
0037
0038 try {
0039 std::lock_guard<std::recursive_mutex> locker(m_lock);
0040
0041
0042 auto logger = spdlog::get(name);
0043 if(!logger) {
0044
0045 logger = spdlog::default_logger()->clone(name);
0046
0047
0048
0049 std::string log_level_str = default_level ? eicrecon::LogLevelToString(default_level.value()) : m_log_level_str;
0050 m_application->SetDefaultParameter(name+":LogLevel", log_level_str, "log_level for "+name+": trace, debug, info, warn, error, critical, off");
0051 logger->set_level(eicrecon::ParseLogLevel(log_level_str));
0052 }
0053 return logger;
0054 }
0055 catch(const std::exception & exception) {
0056 throw JException(exception.what());
0057 }
0058 }
0059
0060 Log_service::level Log_service::getDefaultLevel() {return spdlog::default_logger()->level();}
0061
0062 std::string Log_service::getDefaultLevelStr() {return eicrecon::LogLevelToString(getDefaultLevel());}