diff --git a/logger/Logger.cxx b/logger/Logger.cxx index fa5596d..113f3ab 100644 --- a/logger/Logger.cxx +++ b/logger/Logger.cxx @@ -147,10 +147,12 @@ const unordered_map Logger::fVerbosityMap = { "high", Verbosity::high }, { "medium", Verbosity::medium }, { "low", Verbosity::low }, + { "verylow", Verbosity::verylow }, { "VERYHIGH", Verbosity::veryhigh }, { "HIGH", Verbosity::high }, { "MEDIUM", Verbosity::medium }, - { "LOW", Verbosity::low } + { "LOW", Verbosity::low }, + { "VERYLOW", Verbosity::verylow } }; const unordered_map Logger::fSeverityMap = @@ -161,16 +163,14 @@ const unordered_map Logger::fSeverityMap = { "ERROR", Severity::error }, { "warn", Severity::warn }, { "WARN", Severity::warn }, - { "warning", Severity::warning }, - { "WARNING", Severity::warning }, + { "warning", Severity::warn }, + { "WARNING", Severity::warn }, { "state", Severity::state }, { "STATE", Severity::state }, { "info", Severity::info }, { "INFO", Severity::info }, { "debug", Severity::debug }, { "DEBUG", Severity::debug }, - { "trace", Severity::trace }, - { "TRACE", Severity::trace }, { "debug1", Severity::debug1 }, { "DEBUG1", Severity::debug1 }, { "debug2", Severity::debug2 }, @@ -178,7 +178,9 @@ const unordered_map Logger::fSeverityMap = { "debug3", Severity::debug3 }, { "DEBUG3", Severity::debug3 }, { "debug4", Severity::debug4 }, - { "DEBUG4", Severity::debug4 } + { "DEBUG4", Severity::debug4 }, + { "trace", Severity::trace }, + { "TRACE", Severity::trace } }; const array Logger::fSeverityNames = @@ -199,9 +201,10 @@ const array Logger::fSeverityNames = } }; -const array Logger::fVerbosityNames = +const array Logger::fVerbosityNames = { { + "verylow", "low", "medium", "high", @@ -253,6 +256,11 @@ void Logger::SetConsoleSeverity(const string& severityStr) } } +Severity Logger::GetConsoleSeverity() +{ + return fConsoleSeverity; +} + void Logger::SetFileSeverity(const Severity severity) { fFileSeverity = severity; @@ -291,6 +299,82 @@ void Logger::SetCustomSeverity(const string& key, const string& severityStr) } } +auto Logger::CycleConsoleSeverityUp() -> void +{ + size_t current = static_cast(fConsoleSeverity); + if (current == fSeverityNames.size() - 1) { + SetConsoleSeverity(static_cast(0)); + } else { + SetConsoleSeverity(static_cast(current + 1)); + } + size_t newCurrent = static_cast(fConsoleSeverity); + stringstream ss; + + for (int i = 0; i < fSeverityNames.size(); ++i) { + ss << (i == newCurrent ? ">" : " ") << fSeverityNames.at(i) << (i == newCurrent ? "<" : " "); + } + + ss << "\n\n"; + cout << ss.str() << flush; +} + +auto Logger::CycleConsoleSeverityDown() -> void +{ + size_t current = static_cast(fConsoleSeverity); + if (current == 0) { + SetConsoleSeverity(static_cast(fSeverityNames.size() - 1)); + } else { + SetConsoleSeverity(static_cast(current - 1)); + } + size_t newCurrent = static_cast(fConsoleSeverity); + stringstream ss; + + for (int i = 0; i < fSeverityNames.size(); ++i) { + ss << (i == newCurrent ? ">" : " ") << fSeverityNames.at(i) << (i == newCurrent ? "<" : " "); + } + + ss << "\n\n"; + cout << ss.str() << flush; +} + +auto Logger::CycleVerbosityUp() -> void +{ + size_t current = static_cast(fVerbosity); + if (current == fVerbosityNames.size() - 1) { + SetVerbosity(static_cast(0)); + } else { + SetVerbosity(static_cast(current + 1)); + } + size_t newCurrent = static_cast(fVerbosity); + stringstream ss; + + for (int i = 0; i < fVerbosityNames.size(); ++i) { + ss << (i == newCurrent ? ">" : " ") << fVerbosityNames.at(i) << (i == newCurrent ? "<" : " "); + } + + ss << "\n\n"; + cout << ss.str() << flush; +} + +auto Logger::CycleVerbosityDown() -> void +{ + size_t current = static_cast(fVerbosity); + if (current == 0) { + SetVerbosity(static_cast(fVerbosityNames.size() - 1)); + } else { + SetVerbosity(static_cast(current - 1)); + } + size_t newCurrent = static_cast(fVerbosity); + stringstream ss; + + for (int i = 0; i < fVerbosityNames.size(); ++i) { + ss << (i == newCurrent ? ">" : " ") << fVerbosityNames.at(i) << (i == newCurrent ? "<" : " "); + } + + ss << "\n\n"; + cout << ss.str() << flush; +} + void Logger::UpdateMinSeverity() { fMinSeverity = (fConsoleSeverity <= fFileSeverity) ? fFileSeverity : fConsoleSeverity; @@ -351,6 +435,11 @@ void Logger::SetVerbosity(const string& verbosityStr) } } +Verbosity Logger::GetVerbosity() +{ + return fVerbosity; +} + void Logger::SetConsoleColor(const bool colored) { fColored = colored; @@ -503,14 +592,20 @@ Logger& Logger::Log() fBWOut << "[" << tsstr << "]"; } - fBWOut << "[" << fMetaData.severity_name << "]"; + if (fVerbosity > Verbosity::verylow) + { + fBWOut << "[" << fMetaData.severity_name << "]"; + } if (fVerbosity == Verbosity::veryhigh) { fBWOut << "[" << fMetaData.file << ":" << fMetaData.line << ":" << fMetaData.func << "]"; } - fBWOut << " "; + if (fVerbosity != Verbosity::verylow) + { + fBWOut << " "; + } } if (fColored && (LoggingToConsole())) @@ -525,14 +620,20 @@ Logger& Logger::Log() fColorOut << "[" << startColor(Color::fgCyan) << tsstr << endColor() << "]"; } - fColorOut << "[" << ColoredSeverityWriter(fMetaData.severity) << "]"; + if (fVerbosity > Verbosity::verylow) + { + fColorOut << "[" << ColoredSeverityWriter(fMetaData.severity) << "]"; + } if (fVerbosity == Verbosity::veryhigh) { fColorOut << "[" << ColorOut(Color::fgBlue, fMetaData.file) << ":" << ColorOut(Color::fgYellow, fMetaData.line) << ":" << ColorOut(Color::fgBlue, fMetaData.func) << "]"; } - fColorOut << " "; + if (fVerbosity != Verbosity::verylow) + { + fColorOut << " "; + } } return *this; diff --git a/logger/Logger.h b/logger/Logger.h index 1637ee9..d7c9b37 100644 --- a/logger/Logger.h +++ b/logger/Logger.h @@ -59,17 +59,20 @@ enum class Severity : int }; // verbosity levels: +// verylow: message // low: [severity] message // medium: [HH:MM:SS][severity] message // high: [process name][HH:MM:SS:µS][severity] message // veryhigh: [process name][HH:MM:SS:µS][severity][file:line:function] message enum class Verbosity : int { + verylow, low, medium, high, veryhigh, // backwards-compatibility: + VERYLOW = verylow, LOW = low, MEDIUM = medium, HIGH = high, @@ -116,6 +119,7 @@ class Logger static void SetConsoleSeverity(const Severity severity); static void SetConsoleSeverity(const std::string& severityStr); + static Severity GetConsoleSeverity(); static void SetFileSeverity(const Severity severity); static void SetFileSeverity(const std::string& severityStr); @@ -123,11 +127,17 @@ class Logger static void SetCustomSeverity(const std::string& key, const Severity severity); static void SetCustomSeverity(const std::string& key, const std::string& severityStr); + static void CycleConsoleSeverityUp(); + static void CycleConsoleSeverityDown(); + static void CycleVerbosityUp(); + static void CycleVerbosityDown(); + static bool Logging(const Severity severity); static bool Logging(const std::string& severityStr); static void SetVerbosity(const Verbosity verbosity); static void SetVerbosity(const std::string& verbosityStr); + static Verbosity GetVerbosity(); static void SetConsoleColor(const bool colored = true); @@ -178,7 +188,7 @@ class Logger static const std::unordered_map fVerbosityMap; static const std::unordered_map fSeverityMap; static const std::array fSeverityNames; - static const std::array fVerbosityNames; + static const std::array fVerbosityNames; virtual ~Logger() noexcept(false); diff --git a/test/loggerTest.cxx b/test/loggerTest.cxx index fd37e12..913ecda 100644 --- a/test/loggerTest.cxx +++ b/test/loggerTest.cxx @@ -39,6 +39,9 @@ void printAllVerbositiesWithSeverity(Severity sev) { Logger::SetConsoleSeverity(sev); + cout << endl << "cout: >>> testing severity '" << Logger::SeverityName(sev) << "' with 'verylow' verbosity..." << endl; + Logger::SetVerbosity(Verbosity::verylow); + printEverySeverity(); cout << endl << "cout: >>> testing severity '" << Logger::SeverityName(sev) << "' with 'low' verbosity..." << endl; Logger::SetVerbosity(Verbosity::low); printEverySeverity(); @@ -57,6 +60,8 @@ void silentlyPrintAllVerbositiesWithSeverity(Severity sev) { Logger::SetConsoleSeverity(sev); + Logger::SetVerbosity(Verbosity::verylow); + printEverySeverity(); Logger::SetVerbosity(Verbosity::low); printEverySeverity(); Logger::SetVerbosity(Verbosity::medium);