diff options
author | Treeston <treeston.mmoc@gmail.com> | 2020-08-28 00:11:16 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-08-28 00:11:16 +0200 |
commit | 534a2388b7c662c8796aabb1ec8cb424879799b6 (patch) | |
tree | df01a59b06bbb376dfeb95f2d538ab43b082e20d /src/common/Logging/Log.cpp | |
parent | 7478c2c65aea853a2086c9c7ecc56c14ad6ee338 (diff) |
Core/Common: Tokenizer -> Trinity::Tokenize (PR: #25327)
Diffstat (limited to 'src/common/Logging/Log.cpp')
-rw-r--r-- | src/common/Logging/Log.cpp | 63 |
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); |