API Documentation
00001 // Module: Log4CPLUS 00002 // File: hierarchy.h 00003 // Created: 6/2001 00004 // Author: Tad E. Smith 00005 // 00006 // 00007 // Copyright (C) Tad E. Smith All rights reserved. 00008 // 00009 // This software is published under the terms of the Apache Software 00010 // License version 1.1, a copy of which has been included with this 00011 // distribution in the LICENSE.APL file. 00012 // 00013 00016 #ifndef _LOG4CPLUS_HIERARCHY_HEADER_ 00017 #define _LOG4CPLUS_HIERARCHY_HEADER_ 00018 00019 #include <log4cplus/config.h> 00020 #include <log4cplus/logger.h> 00021 #include <log4cplus/helpers/logloguser.h> 00022 #include <log4cplus/helpers/pointer.h> 00023 #include <log4cplus/helpers/threads.h> 00024 #include <map> 00025 #include <memory> 00026 #include <vector> 00027 00028 00029 namespace log4cplus { 00030 // Forward Declarations 00031 class HierarchyLocker; 00032 00052 class LOG4CPLUS_EXPORT Hierarchy : protected log4cplus::helpers::LogLogUser { 00053 public: 00054 // DISABLE_OFF should be set to a value lower than all possible 00055 // priorities. 00056 static const LogLevel DISABLE_OFF; 00057 static const LogLevel DISABLE_OVERRIDE; 00058 00059 // Ctors 00065 Hierarchy(); 00066 00067 // Dtor 00068 virtual ~Hierarchy(); 00069 00070 // Methods 00079 virtual void clear(); 00080 00087 virtual bool exists(const log4cplus::tstring& name); 00088 00093 virtual void disable(const log4cplus::tstring& loglevelStr); 00094 00114 virtual void disable(LogLevel ll); 00115 00121 virtual void disableAll(); 00122 00128 virtual void disableDebug(); 00129 00135 virtual void disableInfo(); 00136 00144 virtual void enableAll(); 00145 00156 virtual Logger getInstance(const log4cplus::tstring& name); 00157 00170 virtual Logger getInstance(const log4cplus::tstring& name, spi::LoggerFactory& factory); 00171 00177 virtual LoggerList getCurrentLoggers(); 00178 00182 virtual bool isDisabled(int level); 00183 00187 virtual Logger getRoot() const; 00188 00202 virtual void resetConfiguration(); 00203 00207 virtual void setLoggerFactory(std::auto_ptr<spi::LoggerFactory> factory); 00208 00212 virtual spi::LoggerFactory* getLoggerFactory() { return defaultFactory.get(); } 00213 00227 virtual void shutdown(); 00228 00229 private: 00230 // Types 00231 typedef std::vector<Logger> ProvisionNode; 00232 typedef std::map<log4cplus::tstring, ProvisionNode> ProvisionNodeMap; 00233 typedef std::map<log4cplus::tstring, Logger> LoggerMap; 00234 00235 // Methods 00240 virtual Logger getInstanceImpl(const log4cplus::tstring& name, 00241 spi::LoggerFactory& factory); 00242 00247 virtual void initializeLoggerList(LoggerList& list) const; 00248 00269 void updateParents(Logger logger); 00270 00285 void updateChildren(ProvisionNode& pn, Logger logger); 00286 00287 // Data 00288 LOG4CPLUS_MUTEX_PTR_DECLARE hashtable_mutex; 00289 std::auto_ptr<spi::LoggerFactory> defaultFactory; 00290 ProvisionNodeMap provisionNodes; 00291 LoggerMap loggerPtrs; 00292 Logger root; 00293 00294 int disableValue; 00295 00296 bool emittedNoAppenderWarning; 00297 bool emittedNoResourceBundleWarning; 00298 00299 // Disallow copying of instances of this class 00300 Hierarchy(const Hierarchy&); 00301 Hierarchy& operator=(const Hierarchy&); 00302 00303 // Friends 00304 friend class log4cplus::spi::LoggerImpl; 00305 friend class log4cplus::HierarchyLocker; 00306 }; 00307 00308 } // end namespace log4cplus 00309 00310 #endif // _LOG4CPLUS_HIERARCHY_HEADER_ 00311