diff options
Diffstat (limited to 'src/base/logging.cc')
-rw-r--r-- | src/base/logging.cc | 93 |
1 files changed, 34 insertions, 59 deletions
diff --git a/src/base/logging.cc b/src/base/logging.cc index cec9c8360..adc3deb90 100644 --- a/src/base/logging.cc +++ b/src/base/logging.cc @@ -43,80 +43,55 @@ #include "base/logging.hh" -#include <array> +#include <sstream> #include "base/hostinfo.hh" -#include "base/output.hh" -#include "base/trace.hh" -#include "base/types.hh" -#include "sim/core.hh" -void -Logger::setLevel(LogLevel ll) -{ - for (int i = 0; i < NUM_LOG_LEVELS; ++i) - get(LogLevel(i)).enabled = (i <= ll); -} +namespace { -static void -newline_if_needed(std::ostream &stream, const char *format) +class NormalLogger : public Logger { - const size_t format_len(strlen(format)); - - switch (format_len ? format[format_len - 1] : '\0') { - case '\n': - case '\r': - break; - default: - stream << std::endl; - } -} + public: + using Logger::Logger; -Logger::Logger(std::ostream &_stream, const char *_prefix) - : enabled(true), verbose(false), stream(_stream), prefix(_prefix) -{ -} + protected: + void log(const Loc &loc, std::string s) override { std::cerr << s; } +}; -void -Logger::printEpilogue(const char *func, const char *file, int line, - const char *format) +class ExitLogger : public NormalLogger { - newline_if_needed(stream, format); + public: + using NormalLogger::NormalLogger; - if (verbose) { - ccprintf(stream, " @ tick %d\n[%s:%s, line %d]\n", - curTick(), func, file, line); + protected: + void + log(const Loc &loc, std::string s) override + { + std::stringstream ss; + ccprintf(ss, "Memory Usage: %ld KBytes\n", memUsage()); + NormalLogger::log(loc, s + ss.str()); } -} +}; -class ExitLogger : public Logger +class FatalLogger : public ExitLogger { public: - using Logger::Logger; + using ExitLogger::ExitLogger; - void printEpilogue(const char *func, const char *file, int line, - const char *format) override; + protected: + void exit() override { ::exit(1); } }; -void -ExitLogger::printEpilogue(const char *func, const char *file, int line, - const char *format) -{ - Logger::printEpilogue(func, file, line, format); - - ccprintf(stream, "Memory Usage: %ld KBytes\n", memUsage()); -} +ExitLogger panicLogger("panic: "); +FatalLogger fatalLogger("fatal: "); +NormalLogger warnLogger("warn: "); +NormalLogger infoLogger("info: "); +NormalLogger hackLogger("hack: "); -Logger & -Logger::get(LogLevel ll) -{ - static std::array<Logger *, NUM_LOG_LEVELS> loggers{{ - new ExitLogger(std::cerr, "panic"), - new ExitLogger(std::cerr, "fatal"), - new Logger(std::cerr, "warn"), - new Logger(std::cerr, "info"), - new Logger(std::cerr, "hack"), - }}; +} // anonymous namespace - return *loggers[ll]; -} +Logger &Logger::getPanic() { return panicLogger; } +Logger &Logger::getFatal() { return fatalLogger; } +Logger &Logger::getWarn() { return warnLogger; } +Logger &Logger::getInfo() { return infoLogger; } +Logger &Logger::getHack() { return hackLogger; } |