summaryrefslogtreecommitdiffstats
path: root/src/Common/Logger.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/Common/Logger.h')
-rw-r--r--src/Common/Logger.h64
1 files changed, 52 insertions, 12 deletions
diff --git a/src/Common/Logger.h b/src/Common/Logger.h
index 928e65c..465ae00 100644
--- a/src/Common/Logger.h
+++ b/src/Common/Logger.h
@@ -1,29 +1,69 @@
/*
* Logger.h
*
- * Created on: 10.09.2008
- * Author: dante
+ * Copyright (C) 2008 Johannes Thorn <dante@g4t3.de>
+ *
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef MAD_COMMON_LOGGER_H_
#define MAD_COMMON_LOGGER_H_
+#include <algorithm>
+#include <list>
#include <string>
namespace Mad {
namespace Common {
class Logger {
- //TODO Enum type mit unterschiedlichen Stufen
- private:
- int loggingType;
- public:
- enum MessageType {
- CRITICAL, ERROR, WARNING, DEFAULT, VERBOSE, DEBUG
- };
- void printMessage(MessageType typeOfMessage, std::string message);
- Logger(int type);
- virtual ~Logger();
+ public:
+ enum MessageLevel {
+ CRITICAL, ERROR, WARNING, DEFAULT, VERBOSE, DEBUG
+ };
+
+ private:
+ static std::list<Logger*> loggers;
+ MessageLevel level;
+
+ protected:
+ Logger() : level(DEFAULT) {}
+
+ virtual void logMessage(MessageLevel level, const std::string &message) = 0;
+
+ public:
+ static void log(MessageLevel level, const std::string &message);
+
+ static void registerLogger(Logger *logger) {
+ loggers.push_back(logger);
+ }
+
+ static void unregisterLogger(Logger *logger) {
+ std::list<Logger*>::iterator it = std::find(loggers.begin(), loggers.end(), logger);
+ if(it != loggers.end())
+ loggers.erase(it);
+ }
+
+ MessageLevel getLevel() const {
+ return level;
+ }
+
+ void setLevel(MessageLevel newLevel) {
+ level = newLevel;
+ }
+
+ virtual ~Logger() {}
};
}