diff options
-rw-r--r-- | src/Common/Backends/ConsoleLogger.cpp | 2 | ||||
-rw-r--r-- | src/Common/Backends/ConsoleLogger.h | 2 | ||||
-rw-r--r-- | src/Common/Backends/FileLogger.cpp | 2 | ||||
-rw-r--r-- | src/Common/Backends/FileLogger.h | 2 | ||||
-rw-r--r-- | src/Common/Logger.cpp | 22 | ||||
-rw-r--r-- | src/Common/Logger.h | 26 |
6 files changed, 40 insertions, 16 deletions
diff --git a/src/Common/Backends/ConsoleLogger.cpp b/src/Common/Backends/ConsoleLogger.cpp index 4bfa93b..503bca7 100644 --- a/src/Common/Backends/ConsoleLogger.cpp +++ b/src/Common/Backends/ConsoleLogger.cpp @@ -24,7 +24,7 @@ namespace Mad { namespace Common { namespace Backends { -void ConsoleLogger::logMessage(MessageLevel, const std::string &message) { +void ConsoleLogger::logMessage(MessageCategory category, MessageLevel, const std::string &message) { std::cerr << message << std::endl; } diff --git a/src/Common/Backends/ConsoleLogger.h b/src/Common/Backends/ConsoleLogger.h index 72fc179..ee0b51e 100644 --- a/src/Common/Backends/ConsoleLogger.h +++ b/src/Common/Backends/ConsoleLogger.h @@ -28,7 +28,7 @@ namespace Backends { class ConsoleLogger : public Logger { protected: - virtual void logMessage(MessageLevel, const std::string &message); + virtual void logMessage(MessageCategory category, MessageLevel, const std::string &message); public: ConsoleLogger() {} diff --git a/src/Common/Backends/FileLogger.cpp b/src/Common/Backends/FileLogger.cpp index b0bd57b..8d95da5 100644 --- a/src/Common/Backends/FileLogger.cpp +++ b/src/Common/Backends/FileLogger.cpp @@ -23,7 +23,7 @@ namespace Mad { namespace Common { namespace Backends { -void FileLogger::logMessage(MessageLevel, const std::string &message) { +void FileLogger::logMessage(MessageCategory category, MessageLevel, const std::string &message) { file << message << std::endl; } diff --git a/src/Common/Backends/FileLogger.h b/src/Common/Backends/FileLogger.h index 09946df..3626fed 100644 --- a/src/Common/Backends/FileLogger.h +++ b/src/Common/Backends/FileLogger.h @@ -32,7 +32,7 @@ class FileLogger : public Logger { std::ofstream file; protected: - virtual void logMessage(MessageLevel, const std::string &message); + virtual void logMessage(MessageCategory category, MessageLevel, const std::string &message); public: FileLogger(const std::string &filename) diff --git a/src/Common/Logger.cpp b/src/Common/Logger.cpp index 22748d1..199688d 100644 --- a/src/Common/Logger.cpp +++ b/src/Common/Logger.cpp @@ -26,7 +26,7 @@ namespace Common { std::list<Logger*> Logger::loggers; -void Logger::logfv(MessageLevel level, const char *format, va_list ap) { +void Logger::logfv(MessageCategory category, MessageLevel level, const char *format, va_list ap) { int size = 100; char *buf = (char*)std::malloc(size); @@ -39,7 +39,7 @@ void Logger::logfv(MessageLevel level, const char *format, va_list ap) { va_end(ap2); if(n > -1 && n < size) { - log(level, buf); + log(category, level, buf); std::free(buf); return; } @@ -54,18 +54,26 @@ void Logger::logfv(MessageLevel level, const char *format, va_list ap) { } -void Logger::log(MessageLevel level, const std::string &message) { +void Logger::log(MessageCategory category, MessageLevel level, const std::string &message) { for(std::list<Logger*>::iterator logger = loggers.begin(); logger != loggers.end(); ++logger) { - if((*logger)->getLevel() >= level) - (*logger)->logMessage(level, message); + if((*logger)->getLevel() >= level && (*logger)->getCategory() == category) + (*logger)->logMessage(category, level, message); } } +void Logger::logf(MessageCategory category, MessageLevel level, const char *format, ...) { + va_list ap; + + va_start(ap, format); + logfv(category, level, format, ap); + va_end(ap); +} + void Logger::logf(MessageLevel level, const char *format, ...) { va_list ap; va_start(ap, format); - logfv(level, format, ap); + logfv(ALL, level, format, ap); va_end(ap); } @@ -73,7 +81,7 @@ void Logger::logf(const char *format, ...) { va_list ap; va_start(ap, format); - logfv(DEFAULT, format, ap); + logfv(ALL, DEFAULT, format, ap); va_end(ap); } diff --git a/src/Common/Logger.h b/src/Common/Logger.h index f1cd33d..ba14347 100644 --- a/src/Common/Logger.h +++ b/src/Common/Logger.h @@ -33,24 +33,32 @@ class Logger { enum MessageLevel { CRITICAL, ERROR, WARNING, DEFAULT, VERBOSE, DEBUG }; + enum MessageCategory { + ALL, SYSTEM, NETWORK, DAEMON, USER, DISK, PROGRAM, GENERAL + }; private: static std::list<Logger*> loggers; + MessageCategory category; MessageLevel level; - static void logfv(MessageLevel level, const char *format, va_list ap); + static void logfv(MessageCategory category, MessageLevel level, const char *format, va_list ap); protected: - Logger() : level(DEFAULT) {} + Logger() : level(DEFAULT), category(ALL) {} - virtual void logMessage(MessageLevel level, const std::string &message) = 0; + virtual void logMessage(MessageCategory category, MessageLevel level, const std::string &message) = 0; public: - static void log(MessageLevel level, const std::string &message); + static void log(MessageCategory category, MessageLevel level, const std::string &message); + static void log(MessageLevel level, const std::string &message) { + log(ALL, level, message); + } static void log(const std::string &message) { - log(DEFAULT, message); + log(ALL, DEFAULT, message); } + static void logf(MessageCategory category, MessageLevel level, const char *format, ...); static void logf(MessageLevel level, const char *format, ...); static void logf(const char *format, ...); @@ -64,6 +72,14 @@ class Logger { loggers.erase(it); } + MessageCategory getCategory() const { + return category; + } + + void setCategory(MessageCategory newCategory) { + category = newCategory; + } + MessageLevel getLevel() const { return level; } |