diff options
Diffstat (limited to 'src/Core/LogManager.h')
-rw-r--r-- | src/Core/LogManager.h | 55 |
1 files changed, 15 insertions, 40 deletions
diff --git a/src/Core/LogManager.h b/src/Core/LogManager.h index 3aab49e..c569238 100644 --- a/src/Core/LogManager.h +++ b/src/Core/LogManager.h @@ -23,8 +23,8 @@ #include "export.h" #include "Configurable.h" +#include "Exception.h" #include "Logger.h" -#include "RemoteLogger.h" #include <queue> #include <set> @@ -43,38 +43,30 @@ class MAD_CORE_EXPORT LogManager : public Configurable { friend class Application; friend class ThreadManager; - typedef LoggerBase::MessageCategory MessageCategory; - typedef LoggerBase::MessageLevel MessageLevel; + typedef Logger::MessageCategory MessageCategory; + typedef Logger::MessageLevel MessageLevel; struct Message { MessageCategory category; MessageLevel level; boost::posix_time::ptime timestamp; std::string message; - }; - - struct RemoteMessage { - MessageCategory category; - MessageLevel level; - boost::posix_time::ptime timestamp; - std::string message; std::string source; }; - class ConsoleLogger : public Logger, public RemoteLogger { + class ConsoleLogger : public Logger { private: // For long messages, writing to cerr is not atomic // -> lock cerr to prevent messages mixing up - boost::mutex cerrLock; + boost::mutex cerrMutex; protected: - virtual void logMessage(MessageCategory category, MessageLevel level, boost::posix_time::ptime timestamp, const std::string &message); - virtual void logMessage(MessageCategory category, MessageLevel, boost::posix_time::ptime timestamp, const std::string &message, const std::string &messageSource); + virtual void logMessage(MessageCategory category, MessageLevel, boost::posix_time::ptime timestamp, const std::string &message, const std::string &source); public: ConsoleLogger() {} - void logMessageDirect(MessageCategory category, MessageLevel level, boost::posix_time::ptime timestamp, const std::string &message); + void logMessageDirect(MessageCategory category, MessageLevel level, boost::posix_time::ptime timestamp, const std::string &message, const std::string &source); }; @@ -83,23 +75,19 @@ class MAD_CORE_EXPORT LogManager : public Configurable { boost::shared_ptr<ConsoleLogger> consoleLogger; std::set<boost::shared_ptr<Logger> > loggers; - std::set<boost::shared_ptr<RemoteLogger> > remoteLoggers; bool configured, running; - boost::mutex queueLock; + boost::mutex queueMutex; boost::condition_variable queueCond; - boost::mutex loggerLock; - boost::mutex remoteLoggerLock; + boost::mutex loggerMutex; std::queue<Message> messageQueue; - std::queue<RemoteMessage> remoteMessageQueue; void loggerThread(); void stopLoggerThread() { - queueLock.lock(); + boost::lock_guard<boost::mutex> lock(queueMutex); running = false; - queueLock.unlock(); queueCond.notify_one(); } @@ -111,31 +99,18 @@ class MAD_CORE_EXPORT LogManager : public Configurable { virtual void configFinished(); public: - void log(MessageCategory category, MessageLevel level, boost::posix_time::ptime timestamp, const std::string &message); - void log(MessageCategory category, MessageLevel level, boost::posix_time::ptime timestamp, const std::string &message, const std::string &source); + static MessageLevel parseLevel(const std::string &str) throw (Exception); + + void log(MessageCategory category, MessageLevel level, boost::posix_time::ptime timestamp, const std::string &message, const std::string &source = std::string()); void registerLogger(boost::shared_ptr<Logger> logger) { - loggerLock.lock(); + boost::lock_guard<boost::mutex> lock(loggerMutex); loggers.insert(logger); - loggerLock.unlock(); } void unregisterLogger(boost::shared_ptr<Logger> logger) { - loggerLock.lock(); + boost::lock_guard<boost::mutex> lock(loggerMutex); loggers.erase(logger); - loggerLock.unlock(); - } - - void registerLogger(boost::shared_ptr<RemoteLogger> logger) { - remoteLoggerLock.lock(); - remoteLoggers.insert(logger); - remoteLoggerLock.unlock(); - } - - void unregisterLogger(boost::shared_ptr<RemoteLogger> logger) { - remoteLoggerLock.lock(); - remoteLoggers.erase(logger); - remoteLoggerLock.unlock(); } }; |