/* * Logger.h * * Copyright (C) 2008 Johannes Thorn * * This program is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License along * with this program. If not, see . */ #ifndef MAD_CORE_LOGGER_H_ #define MAD_CORE_LOGGER_H_ #include #include #include namespace Mad { namespace Core { class LogManager; class Logger { public: friend class LogManager; enum MessageLevel { LOG_CRITICAL, LOG_ERROR, LOG_WARNING, LOG_DEFAULT, LOG_VERBOSE, LOG_DEBUG }; enum MessageCategory { LOG_SYSTEM, LOG_NETWORK, LOG_DAEMON, LOG_USER, LOG_DISK, LOG_PROGRAM, LOG_GENERAL }; private: std::bitset<16> categories; MessageLevel level; protected: Logger() : level(LOG_DEFAULT) {setAllCategories();} virtual ~Logger() {} virtual void logMessage(MessageCategory category, MessageLevel level, boost::posix_time::ptime timestamp, const std::string &message, const std::string &source) = 0; public: void setCategory(MessageCategory newCategory) { categories.set(newCategory); } void unsetCategory(MessageCategory oldCategory) { categories.reset(oldCategory); } void setAllCategories() { categories.set(); } void unsetAllCategories() { categories.reset(); } bool isCategorySet(MessageCategory category) const { return categories.test(category); } MessageLevel getLevel() const { return level; } void setLevel(MessageLevel newLevel) { level = newLevel; } }; } } #endif /* MAD_CORE_LOGGER_H_ */