configurable log level

pull/1061/head
Jeff Becker 4 years ago
parent 5be1865318
commit 40876a6e3f
No known key found for this signature in database
GPG Key ID: F357B3B42F6F9B05

@ -396,6 +396,18 @@ namespace llarp
LogContext::Instance().logStream = std::make_unique< SysLogStream >();
#endif
}
if(key == "level")
{
const auto maybe = LogLevelFromString(tostr(val));
if(not maybe.has_value())
{
LogError("bad log level: ", val);
return;
}
const LogLevel lvl = maybe.value();
LogContext::Instance().runtimeLevel = lvl;
LogInfo("Log level set to ", LogLevelToName(lvl));
}
if(key == "type" && val == "json")
{
m_LogJSON = true;

@ -1,4 +1,5 @@
#include <util/logging/loglevel.hpp>
#include <unordered_map>
namespace llarp
{
@ -21,4 +22,45 @@ namespace llarp
return "???";
}
}
std::string
LogLevelToName(LogLevel lvl)
{
switch(lvl)
{
case eLogTrace:
return "Trace";
case eLogDebug:
return "Debug";
case eLogInfo:
return "Info";
case eLogWarn:
return "Warn";
case eLogError:
return "Error";
case eLogNone:
return "Off";
default:
return "???";
}
}
absl::optional< LogLevel >
LogLevelFromString(std::string level)
{
std::transform(level.begin(), level.end(), level.begin(),
[](const char ch) -> char { return std::tolower(ch); });
static const std::unordered_map< std::string, LogLevel > levels = {
{"spew", eLogTrace}, {"trc", eLogTrace}, {"trace", eLogTrace},
{"dbg", eLogDebug}, {"verbose", eLogDebug}, {"debug", eLogDebug},
{"info", eLogInfo}, {"nfo", eLogInfo}, {"true", eLogInfo},
{"wrn", eLogWarn}, {"warn", eLogWarn}, {"warning", eLogWarn},
{"err", eLogError}, {"error", eLogError}, {"quiet", eLogError},
{"silent", eLogNone}, {"off", eLogNone}, {"false", eLogNone}};
const auto itr = levels.find(level);
if(itr == levels.end())
return {};
return itr->second;
}
} // namespace llarp

@ -1,6 +1,7 @@
#ifndef LLARP_UTIL_LOG_LEVEL_HPP
#define LLARP_UTIL_LOG_LEVEL_HPP
#include <string>
#include <absl/types/optional.h>
namespace llarp
{
@ -18,6 +19,12 @@ namespace llarp
std::string
LogLevelToString(LogLevel level);
std::string
LogLevelToName(LogLevel lvl);
absl::optional< LogLevel >
LogLevelFromString(std::string level);
} // namespace llarp
#endif

Loading…
Cancel
Save