aboutsummaryrefslogtreecommitdiff
path: root/src/common/Logging/Log.cpp
diff options
context:
space:
mode:
authorTreeston <treeston.mmoc@gmail.com>2020-08-28 00:11:16 +0200
committerGitHub <noreply@github.com>2020-08-28 00:11:16 +0200
commit534a2388b7c662c8796aabb1ec8cb424879799b6 (patch)
treedf01a59b06bbb376dfeb95f2d538ab43b082e20d /src/common/Logging/Log.cpp
parent7478c2c65aea853a2086c9c7ecc56c14ad6ee338 (diff)
Core/Common: Tokenizer -> Trinity::Tokenize (PR: #25327)
Diffstat (limited to 'src/common/Logging/Log.cpp')
-rw-r--r--src/common/Logging/Log.cpp63
1 files changed, 32 insertions, 31 deletions
diff --git a/src/common/Logging/Log.cpp b/src/common/Logging/Log.cpp
index 436f0366064..c4a00af8c9e 100644
--- a/src/common/Logging/Log.cpp
+++ b/src/common/Logging/Log.cpp
@@ -25,6 +25,7 @@
#include "LogMessage.h"
#include "LogOperation.h"
#include "Strand.h"
+#include "StringConvert.h"
#include "Util.h"
#include <chrono>
#include <sstream>
@@ -47,7 +48,7 @@ uint8 Log::NextAppenderId()
return AppenderId++;
}
-Appender* Log::GetAppenderByName(std::string const& name)
+Appender* Log::GetAppenderByName(std::string_view name)
{
auto it = appenders.begin();
while (it != appenders.end() && it->second && it->second->getName() != name)
@@ -66,10 +67,9 @@ void Log::CreateAppenderFromConfig(std::string const& appenderName)
// if type = Console. optional1 = Color
std::string options = sConfigMgr->GetStringDefault(appenderName, "");
- Tokenizer tokens(options, ',');
- auto iter = tokens.begin();
+ std::vector<std::string_view> tokens = Trinity::Tokenize(options, ',', true);
- size_t size = tokens.size();
+ size_t const size = tokens.size();
std::string name = appenderName.substr(9);
if (size < 2)
@@ -79,33 +79,41 @@ void Log::CreateAppenderFromConfig(std::string const& appenderName)
}
AppenderFlags flags = APPENDER_FLAGS_NONE;
- AppenderType type = AppenderType(atoi(*iter++));
- LogLevel level = LogLevel(atoi(*iter++));
+ AppenderType type = AppenderType(Trinity::StringTo<uint8>(tokens[0]).value_or(APPENDER_INVALID));
+ LogLevel level = LogLevel(Trinity::StringTo<uint8>(tokens[1]).value_or(LOG_LEVEL_INVALID));
- if (level > LOG_LEVEL_FATAL)
+ auto factoryFunction = appenderFactory.find(type);
+ if (factoryFunction == appenderFactory.end())
{
- fprintf(stderr, "Log::CreateAppenderFromConfig: Wrong Log Level %d for appender %s\n", level, name.c_str());
+ fprintf(stderr, "Log::CreateAppenderFromConfig: Unknown type '%s' for appender %s\n", std::string(tokens[0]).c_str(), name.c_str());
return;
}
- if (size > 2)
- flags = AppenderFlags(atoi(*iter++));
-
- auto factoryFunction = appenderFactory.find(type);
- if (factoryFunction == appenderFactory.end())
+ if (level > NUM_ENABLED_LOG_LEVELS)
{
- fprintf(stderr, "Log::CreateAppenderFromConfig: Unknown type %d for appender %s\n", type, name.c_str());
+ fprintf(stderr, "Log::CreateAppenderFromConfig: Wrong Log Level '%s' for appender %s\n", std::string(tokens[1]).c_str(), name.c_str());
return;
}
+ if (size > 2)
+ {
+ if (Optional<uint8> flagsVal = Trinity::StringTo<uint8>(tokens[2]))
+ flags = AppenderFlags(*flagsVal);
+ else
+ {
+ fprintf(stderr, "Log::CreateAppenderFromConfig: Unknown flags '%s' for appender %s\n", std::string(tokens[2]).c_str(), name.c_str());
+ return;
+ }
+ }
+
try
{
- Appender* appender = factoryFunction->second(NextAppenderId(), name, level, flags, std::vector<char const*>(iter, tokens.end()));
+ Appender* appender = factoryFunction->second(NextAppenderId(), name, level, flags, tokens);
appenders[appender->getId()].reset(appender);
}
catch (InvalidAppenderArgsException const& iaae)
{
- fprintf(stderr, "%s", iaae.what());
+ fprintf(stderr, "%s\n", iaae.what());
}
}
@@ -115,7 +123,6 @@ void Log::CreateLoggerFromConfig(std::string const& appenderName)
return;
LogLevel level = LOG_LEVEL_DISABLED;
- uint8 type = uint8(-1);
std::string options = sConfigMgr->GetStringDefault(appenderName, "");
std::string name = appenderName.substr(7);
@@ -126,8 +133,7 @@ void Log::CreateLoggerFromConfig(std::string const& appenderName)
return;
}
- Tokenizer tokens(options, ',');
- Tokenizer::const_iterator iter = tokens.begin();
+ std::vector<std::string_view> tokens = Trinity::Tokenize(options, ',', true);
if (tokens.size() != 2)
{
@@ -142,10 +148,10 @@ void Log::CreateLoggerFromConfig(std::string const& appenderName)
return;
}
- level = LogLevel(atoi(*iter++));
- if (level > LOG_LEVEL_FATAL)
+ level = LogLevel(Trinity::StringTo<uint8>(tokens[0]).value_or(LOG_LEVEL_INVALID));
+ if (level > NUM_ENABLED_LOG_LEVELS)
{
- fprintf(stderr, "Log::CreateLoggerFromConfig: Wrong Log Level %u for logger %s\n", type, name.c_str());
+ fprintf(stderr, "Log::CreateLoggerFromConfig: Wrong Log Level '%s' for logger %s\n", std::string(tokens[0]).c_str(), name.c_str());
return;
}
@@ -155,20 +161,15 @@ void Log::CreateLoggerFromConfig(std::string const& appenderName)
logger = std::make_unique<Logger>(name, level);
//fprintf(stdout, "Log::CreateLoggerFromConfig: Created Logger %s, Level %u\n", name.c_str(), level);
- std::istringstream ss(*iter);
- std::string str;
-
- ss >> str;
- while (ss)
+ for (std::string_view appenderName : Trinity::Tokenize(tokens[1], ' ', false))
{
- if (Appender* appender = GetAppenderByName(str))
+ if (Appender* appender = GetAppenderByName(appenderName))
{
logger->addAppender(appender->getId(), appender);
//fprintf(stdout, "Log::CreateLoggerFromConfig: Added Appender %s to Logger %s\n", appender->getName().c_str(), name.c_str());
}
else
- fprintf(stderr, "Error while configuring Appender %s in Logger %s. Appender does not exist", str.c_str(), name.c_str());
- ss >> str;
+ fprintf(stderr, "Error while configuring Appender %s in Logger %s. Appender does not exist\n", std::string(appenderName).c_str(), name.c_str());
}
}
@@ -193,7 +194,7 @@ void Log::ReadLoggersFromConfig()
Close(); // Clean any Logger or Appender created
- AppenderConsole* appender = new AppenderConsole(NextAppenderId(), "Console", LOG_LEVEL_DEBUG, APPENDER_FLAGS_NONE, std::vector<char const*>());
+ AppenderConsole* appender = new AppenderConsole(NextAppenderId(), "Console", LOG_LEVEL_DEBUG, APPENDER_FLAGS_NONE, {});
appenders[appender->getId()].reset(appender);
Logger* rootLogger = new Logger(LOGGER_ROOT, LOG_LEVEL_ERROR);