00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
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
00031 class HierarchyLocker;
00032
00052 class LOG4CPLUS_EXPORT Hierarchy : protected log4cplus::helpers::LogLogUser {
00053 public:
00054
00055
00056 static const LogLevel DISABLE_OFF;
00057 static const LogLevel DISABLE_OVERRIDE;
00058
00059
00065 Hierarchy();
00066
00067
00068 virtual ~Hierarchy();
00069
00070
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
00231 typedef std::vector<Logger> ProvisionNode;
00232 typedef std::map<log4cplus::tstring, ProvisionNode> ProvisionNodeMap;
00233 typedef std::map<log4cplus::tstring, Logger> LoggerMap;
00234
00235
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
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
00300 Hierarchy(const Hierarchy&);
00301 Hierarchy& operator=(const Hierarchy&);
00302
00303
00304 friend class log4cplus::spi::LoggerImpl;
00305 friend class log4cplus::HierarchyLocker;
00306 };
00307
00308 }
00309
00310 #endif // _LOG4CPLUS_HIERARCHY_HEADER_
00311