00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00016 #ifndef _CONFIGURATOR_HEADER_
00017 #define _CONFIGURATOR_HEADER_
00018
00019 #include <log4cplus/config.h>
00020 #include <log4cplus/appender.h>
00021 #include <log4cplus/hierarchy.h>
00022 #include <log4cplus/logger.h>
00023 #include <log4cplus/helpers/logloguser.h>
00024 #include <log4cplus/helpers/pointer.h>
00025 #include <log4cplus/helpers/property.h>
00026
00027 #include <map>
00028
00029
00030 namespace log4cplus {
00031
00048 class LOG4CPLUS_EXPORT PropertyConfigurator : protected log4cplus::helpers::LogLogUser
00049 {
00050 public:
00051
00052 PropertyConfigurator(const log4cplus::tstring& propertyFile,
00053 Hierarchy& h = Logger::getDefaultHierarchy());
00054 PropertyConfigurator(const log4cplus::helpers::Properties& props,
00055 Hierarchy& h = Logger::getDefaultHierarchy());
00056 PropertyConfigurator(log4cplus::tistream& propertyStream,
00057 Hierarchy& h = Logger::getDefaultHierarchy());
00058 virtual ~PropertyConfigurator();
00059
00069 static void doConfigure(const log4cplus::tstring& configFilename,
00070 Hierarchy& h = Logger::getDefaultHierarchy());
00071
00217 virtual void configure();
00218
00219 protected:
00220
00221 void init();
00222 void reconfigure();
00223 void replaceEnvironVariables();
00224 void configureLoggers();
00225 void configureLogger(log4cplus::Logger logger, const log4cplus::tstring& config);
00226 void configureAppenders();
00227 void configureAdditivity();
00228
00229 virtual Logger getLogger(const log4cplus::tstring& name);
00230 virtual void addAppender(Logger &logger, log4cplus::SharedAppenderPtr& appender);
00231
00232
00233 typedef std::map<log4cplus::tstring, log4cplus::SharedAppenderPtr> AppenderMap;
00234
00235
00236 Hierarchy& h;
00237 log4cplus::tstring propertyFilename;
00238 log4cplus::helpers::Properties properties;
00239 AppenderMap appenders;
00240
00241 private:
00242
00243 PropertyConfigurator(const PropertyConfigurator&);
00244 PropertyConfigurator& operator=(PropertyConfigurator&);
00245 };
00246
00247
00248
00253 class LOG4CPLUS_EXPORT BasicConfigurator : public PropertyConfigurator {
00254 public:
00255
00256 BasicConfigurator(Hierarchy& h = Logger::getDefaultHierarchy());
00257 virtual ~BasicConfigurator();
00258
00268 static void doConfigure(Hierarchy& h = Logger::getDefaultHierarchy());
00269
00270 private:
00271
00272 BasicConfigurator(const BasicConfigurator&);
00273 BasicConfigurator& operator=(BasicConfigurator&);
00274 };
00275
00276
00277 #if !defined(LOG4CPLUS_SINGLE_THREADED)
00278
00279 class ConfigurationWatchDogThread;
00280
00281
00282 class LOG4CPLUS_EXPORT ConfigureAndWatchThread {
00283 public:
00284
00285 ConfigureAndWatchThread(const log4cplus::tstring& propertyFile,
00286 unsigned int millis = 60 * 1000);
00287 virtual ~ConfigureAndWatchThread();
00288
00289 private:
00290
00291 ConfigureAndWatchThread(const ConfigureAndWatchThread&);
00292 ConfigureAndWatchThread& operator=(const ConfigureAndWatchThread&);
00293
00294
00295 log4cplus::helpers::SharedObjectPtr<ConfigurationWatchDogThread> watchDogThread;
00296 };
00297 #endif
00298
00299 }
00300
00301 #endif // _CONFIGURATOR_HEADER_
00302