summaryrefslogtreecommitdiff
path: root/src/base/logging.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/base/logging.cc')
-rw-r--r--src/base/logging.cc93
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; }