From 7234fe326d16d6bf9f4374a09ddc6ef790e6723f Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Thu, 18 Jun 2009 22:03:02 +0200 Subject: Globale Variablen durch Application-Klasse ersetzt --- src/modules/FileLogger/CMakeLists.txt | 3 +- src/modules/FileLogger/FileLogger.cpp | 70 ----------------------------------- src/modules/FileLogger/FileLogger.h | 40 ++++---------------- src/modules/FileLogger/Module.cpp | 62 +++++++++++++++++++++++++++++++ src/modules/FileLogger/Module.h | 67 +++++++++++++++++++++++++++++++++ 5 files changed, 139 insertions(+), 103 deletions(-) delete mode 100644 src/modules/FileLogger/FileLogger.cpp create mode 100644 src/modules/FileLogger/Module.cpp create mode 100644 src/modules/FileLogger/Module.h (limited to 'src/modules/FileLogger') diff --git a/src/modules/FileLogger/CMakeLists.txt b/src/modules/FileLogger/CMakeLists.txt index 7d90028..555425d 100644 --- a/src/modules/FileLogger/CMakeLists.txt +++ b/src/modules/FileLogger/CMakeLists.txt @@ -1,5 +1,6 @@ include_directories(${INCLUDES}) add_library(FileLogger MODULE - FileLogger.cpp FileLogger.h + FileLogger.h + Module.cpp Module.h ) diff --git a/src/modules/FileLogger/FileLogger.cpp b/src/modules/FileLogger/FileLogger.cpp deleted file mode 100644 index bdae536..0000000 --- a/src/modules/FileLogger/FileLogger.cpp +++ /dev/null @@ -1,70 +0,0 @@ -/* - * FileLogger.cpp - * - * Copyright (C) 2008 Matthias Schiffer - * - * 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 . - */ - -#include "FileLogger.h" - -#include - - -namespace Mad { -namespace Modules { - -FileLogger::ConfigHelper FileLogger::configHelper; -std::set > FileLogger::loggers; - - -bool FileLogger::ConfigHelper::handleConfigEntry(const Core::ConfigEntry &entry, bool handled) { - if(handled) - return false; - - if(entry[0].getKey().matches("Logger")) { - if(entry[0][0].matches("File")) { - if(entry[1].empty()) { - if(!entry[0][1].empty()) { - boost::shared_ptr logger(new FileLogger(entry[0][1])); - - loggers.insert(logger); - Core::LogManager::get()->registerLogger(boost::static_pointer_cast(logger)); - } - else { - Logger::logf(Logger::WARNING, "FileLogger: no filename given."); - } - - return true; - } - } - } - - return false; -} - -} -} - -extern "C" { - -void FileLogger_init() { - Mad::Modules::FileLogger::registerConfigHelper(); -} - -void FileLogger_deinit() { - Mad::Modules::FileLogger::unregisterConfigHelper(); -} - -} diff --git a/src/modules/FileLogger/FileLogger.h b/src/modules/FileLogger/FileLogger.h index 9b0f8e2..a24f747 100644 --- a/src/modules/FileLogger/FileLogger.h +++ b/src/modules/FileLogger/FileLogger.h @@ -17,31 +17,20 @@ * with this program. If not, see . */ -#ifndef MAD_MODULES_FILELOGGER_H_ -#define MAD_MODULES_FILELOGGER_H_ - -#include -#include -#include +#ifndef MAD_MODULES_FILELOGGER_FILELOGGER_H_ +#define MAD_MODULES_FILELOGGER_FILELOGGER_H_ #include +#include +#include + namespace Mad { namespace Modules { +namespace FileLogger { class FileLogger : public Core::Logger, public Core::RemoteLogger { private: - class ConfigHelper : public Core::Configurable { - protected: - virtual bool handleConfigEntry(const Core::ConfigEntry &entry, bool handled); - - public: - virtual int getPriority() const {return 1;} - }; - - static ConfigHelper configHelper; - static std::set > loggers; - std::ofstream file; protected: @@ -55,23 +44,10 @@ class FileLogger : public Core::Logger, public Core::RemoteLogger { public: FileLogger(const std::string &filename) : file(filename.c_str(), std::ios::out|std::ios::app) {} - - static void registerConfigHelper() { - Core::ConfigManager::get()->registerConfigurable(&configHelper); - } - - static void unregisterConfigHelper() { - Core::ConfigManager::get()->unregisterConfigurable(&configHelper); - - for(std::set >::iterator logger = loggers.begin(); logger != loggers.end(); ++logger) { - Core::LogManager::get()->unregisterLogger(boost::static_pointer_cast(*logger)); - } - - loggers.clear(); - } }; +} } } -#endif /* MAD_MODULES_FILELOGGER_H_ */ +#endif /* MAD_MODULES_FILELOGGER_FILELOGGER_H_ */ diff --git a/src/modules/FileLogger/Module.cpp b/src/modules/FileLogger/Module.cpp new file mode 100644 index 0000000..829c429 --- /dev/null +++ b/src/modules/FileLogger/Module.cpp @@ -0,0 +1,62 @@ +/* + * Module.cpp + * + * Copyright (C) 2009 Matthias Schiffer + * + * 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 . + */ + +#include "Module.h" +#include + +namespace Mad { +namespace Modules { +namespace FileLogger { + +bool Module::handleConfigEntry(const Core::ConfigEntry &entry, bool handled) { + if(handled) + return false; + + if(entry[0].getKey().matches("Logger")) { + if(entry[0][0].matches("File")) { + if(entry[1].empty()) { + if(!entry[0][1].empty()) { + boost::shared_ptr logger(new FileLogger(entry[0][1])); + + loggers.insert(logger); + application->getLogManager()->registerLogger(boost::static_pointer_cast(logger)); + } + else { + application->logf(Core::LoggerBase::WARNING, "FileLogger: no filename given."); + } + + return true; + } + } + } + + return false; +} + +} +} +} + +extern "C" { + +Mad::Common::Module* FileLogger_create(Mad::Common::Application *application) { + return new Mad::Modules::FileLogger::Module(application); +} + +} diff --git a/src/modules/FileLogger/Module.h b/src/modules/FileLogger/Module.h new file mode 100644 index 0000000..e800b69 --- /dev/null +++ b/src/modules/FileLogger/Module.h @@ -0,0 +1,67 @@ +/* + * Module.h + * + * Copyright (C) 2009 Matthias Schiffer + * + * 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 . + */ + +#ifndef MAD_MODULES_FILELOGGER_MODULE_H_ +#define MAD_MODULES_FILELOGGER_MODULE_H_ + +#include "FileLogger.h" + +#include +#include +#include + +#include +#include + +namespace Mad { +namespace Modules { +namespace FileLogger { + +class Module : public Common::Module, private Core::Configurable { + private: + Common::Application *application; + + std::set > loggers; + + protected: + virtual bool handleConfigEntry(const Core::ConfigEntry &entry, bool handled); + + public: + Module(Common::Application *application0) : application(application0) { + application->getConfigManager()->registerConfigurable(this); + } + + virtual ~Module() { + application->getConfigManager()->unregisterConfigurable(this); + + for(std::set >::iterator logger = loggers.begin(); logger != loggers.end(); ++logger) { + application->getLogManager()->unregisterLogger(boost::static_pointer_cast(*logger)); + } + + loggers.clear(); + } + + virtual int getPriority() const {return 1;} +}; + +} +} +} + +#endif /* MAD_MODULES_FILELOGGER_MODULE_H_ */ -- cgit v1.2.3