Fix parsing logger ids
This commit is contained in:
parent
18749c26ce
commit
7452def2e7
2 changed files with 17 additions and 15 deletions
|
@ -481,12 +481,12 @@ nano::log_config nano::load_log_config (nano::log_config fallback, const std::fi
|
|||
if (env_levels)
|
||||
{
|
||||
std::map<nano::log::logger_id, nano::log::level> levels;
|
||||
for (auto const & env_level_str : nano::util::split (*env_levels, ','))
|
||||
for (auto const & env_level_str : nano::util::split (*env_levels, ","))
|
||||
{
|
||||
try
|
||||
{
|
||||
// Split 'logger_name=level' into a pair of 'logger_name' and 'level'
|
||||
auto arr = nano::util::split (env_level_str, '=');
|
||||
auto arr = nano::util::split (env_level_str, "=");
|
||||
if (arr.size () != 2)
|
||||
{
|
||||
throw std::invalid_argument ("Invalid entry: " + env_level_str);
|
||||
|
@ -579,16 +579,14 @@ std::string nano::log::to_string (nano::log::logger_id logger_id)
|
|||
*/
|
||||
nano::log::logger_id nano::log::parse_logger_id (const std::string & logger_name)
|
||||
{
|
||||
auto pos = logger_name.find ("::");
|
||||
if (pos == std::string::npos)
|
||||
auto parts = nano::util::split (logger_name, "::");
|
||||
if (parts.size () == 1)
|
||||
{
|
||||
return { nano::log::parse_type (logger_name), nano::log::detail::all };
|
||||
return { nano::log::parse_type (parts[0]), nano::log::detail::all };
|
||||
}
|
||||
else
|
||||
if (parts.size () == 2)
|
||||
{
|
||||
auto logger_type = logger_name.substr (0, pos);
|
||||
auto logger_detail = logger_name.substr (pos + 1);
|
||||
|
||||
return { nano::log::parse_type (logger_type), nano::log::parse_detail (logger_detail) };
|
||||
return { nano::log::parse_type (parts[0]), nano::log::parse_detail (parts[1]) };
|
||||
}
|
||||
throw std::invalid_argument ("Invalid logger name: " + logger_name);
|
||||
}
|
|
@ -246,15 +246,19 @@ std::string join (Container const & container, std::string_view delimiter, Func
|
|||
return join (container.begin (), container.end (), delimiter, transform);
|
||||
}
|
||||
|
||||
inline std::vector<std::string> split (const std::string & str, char delimiter)
|
||||
inline std::vector<std::string> split (std::string const & input, std::string_view delimiter)
|
||||
{
|
||||
std::stringstream ss{ str };
|
||||
std::vector<std::string> result;
|
||||
std::string item;
|
||||
while (std::getline (ss, item, delimiter))
|
||||
std::size_t startPos = 0;
|
||||
std::size_t delimiterPos = input.find (delimiter, startPos);
|
||||
while (delimiterPos != std::string::npos)
|
||||
{
|
||||
result.push_back (item);
|
||||
std::string token = input.substr (startPos, delimiterPos - startPos);
|
||||
result.push_back (token);
|
||||
startPos = delimiterPos + delimiter.length ();
|
||||
delimiterPos = input.find (delimiter, startPos);
|
||||
}
|
||||
result.push_back (input.substr (startPos));
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue