# Category.hh

Go to the documentation of this file.

    00001 /*
    00002  * Category.hh
    00003  *
    00004  * Copyright 2000, LifeLine Networks BV (www.lifeline.nl). All rights reserved.
    00005  * Copyright 2000, Bastiaan Bakker. All rights reserved.
    00006  *
    00007  * See the COPYING file for the terms of usage and distribution.
    00008  */
    00009
    00010 #ifndef _LOG4CPP_CATEGORY_HH
    00011 #define _LOG4CPP_CATEGORY_HH
    00012
    00013 #include <log4cpp/Portability.hh>
    00014 #include <log4cpp/Appender.hh>
    00015 #include <log4cpp/LoggingEvent.hh>
    00016 #include <log4cpp/Priority.hh>
    00017 #include <log4cpp/CategoryStream.hh>
    00018 #include <log4cpp/threading/Threading.hh>
    00019 #include <log4cpp/convenience.h>
    00020
    00021 #include <map>
    00022 #include <vector>
    00023 #include <cstdarg>
    00024 #include <stdexcept>
    00025
    00026 namespace log4cpp {
    00027
    00033     class LOG4CPP_EXPORT Category {
    00034         friend class HierarchyMaintainer;
    00035
    00036         public:
    00048         static Category& getRoot();
    00049
    00054         static void setRootPriority(Priority::Value priority);
    00055
    00060         static Priority::Value getRootPriority() throw();
    00061
    00069         static Category& getInstance(const std::string& name);
    00070
    00076         static Category* exists(const std::string& name);
    00077
    00090         static std::vector<Category*>* getCurrentCategories();
    00091
    00095         static void shutdown();
    00096
    00100         virtual ~Category();
    00101
    00106         virtual const std::string& getName() const throw();
    00107
    00115         virtual void setPriority(Priority::Value priority)
    00116         throw(std::invalid_argument);
    00117
    00122         virtual Priority::Value getPriority() const throw();
    00123
    00132         virtual Priority::Value getChainedPriority() const throw();
    00133
    00140         virtual bool isPriorityEnabled(Priority::Value priority) const throw();
    00141
    00149         virtual void addAppender(Appender* appender)
    00150         throw(std::invalid_argument);
    00151
    00158         virtual void addAppender(Appender& appender);
    00159
    00168         inline void setAppender(Appender* appender) {
    00169             if (appender) {
    00170                 addAppender(appender);
    00171             } else {
    00172                 removeAllAppenders();
    00173             }
    00174         };
    00175
    00182         inline void setAppender(Appender& appender) {
    00183             addAppender(appender);
    00184         };
    00185
    00192         virtual Appender* getAppender() const;
    00193
    00200         virtual Appender* getAppender(const std::string& name) const;
    00201
    00207         virtual AppenderSet getAllAppenders() const;
    00208
    00212         virtual void removeAllAppenders();
    00213
    00218         virtual void removeAppender(Appender* appender);
    00219
    00226         virtual bool ownsAppender() const throw() {
    00227             return ownsAppender(getAppender());
    00228         };
    00229
    00235         virtual bool ownsAppender(Appender* appender) const throw();
    00236
    00248         virtual void callAppenders(const LoggingEvent& event) throw();
    00249
    00253         virtual void setAdditivity(bool additivity);
    00254
    00258         virtual bool getAdditivity() const throw();
    00259
    00265         virtual Category* getParent() throw();
    00266
    00272         virtual const Category* getParent() const throw();
    00273
    00281         virtual void log(Priority::Value priority, const char* stringFormat,
    00282                          ...) throw();
    00283
    00289         virtual void log(Priority::Value priority,
    00290                          const std::string& message) throw();
    00291
    00300         virtual void logva(Priority::Value priority,
    00301                            const char* stringFormat,
    00302                            va_list va) throw();
    00303
    00310         void debug(const char* stringFormat, ...) throw();
    00311
    00316         void debug(const std::string& message) throw();
    00317
    00322         inline bool isDebugEnabled() const throw() {
    00323             return isPriorityEnabled(Priority::DEBUG);
    00324         };
    00325
    00330         inline CategoryStream debugStream() {
    00331             return getStream(Priority::DEBUG);
    00332         }
    00333
    00340         void info(const char* stringFormat, ...) throw();
    00341
    00346         void info(const std::string& message) throw();
    00347
    00352         inline bool isInfoEnabled() const throw() {
    00353             return isPriorityEnabled(Priority::INFO);
    00354         };
    00355
    00360         inline CategoryStream infoStream() {
    00361             return getStream(Priority::INFO);
    00362         }
    00363
    00370         void notice(const char* stringFormat, ...) throw();
    00371
    00376         void notice(const std::string& message) throw();
    00377
    00382         inline bool isNoticeEnabled() const throw() {
    00383             return isPriorityEnabled(Priority::NOTICE);
    00384         };
    00385
    00390         inline CategoryStream noticeStream() {
    00391             return getStream(Priority::NOTICE);
    00392         }
    00393
    00400         void warn(const char* stringFormat, ...) throw();
    00401
    00406         void warn(const std::string& message) throw();
    00407
    00412         inline bool isWarnEnabled() const throw() {
    00413             return isPriorityEnabled(Priority::WARN);
    00414         };
    00415
    00420         inline CategoryStream warnStream() {
    00421             return getStream(Priority::WARN);
    00422         };
    00423
    00430         void error(const char* stringFormat, ...) throw();
    00431
    00436         void error(const std::string& message) throw();
    00437
    00442         inline bool isErrorEnabled() const throw() {
    00443             return isPriorityEnabled(Priority::ERROR);
    00444         };
    00445
    00450         inline CategoryStream errorStream() {
    00451             return getStream(Priority::ERROR);
    00452         };
    00453
    00460         void crit(const char* stringFormat, ...) throw();
    00461
    00466         void crit(const std::string& message) throw();
    00467
    00472         inline bool isCritEnabled() const throw() {
    00473             return isPriorityEnabled(Priority::CRIT);
    00474         };
    00475
    00480         inline CategoryStream critStream() {
    00481             return getStream(Priority::CRIT);
    00482         };
    00483
    00490         void alert(const char* stringFormat, ...) throw();
    00491
    00496         void alert(const std::string& message) throw();
    00497
    00502         inline bool isAlertEnabled() const throw() {
    00503             return isPriorityEnabled(Priority::ALERT);
    00504         };
    00505
    00510         inline CategoryStream alertStream() throw() {
    00511             return getStream(Priority::ALERT);
    00512         };
    00513
    00520         void emerg(const char* stringFormat, ...) throw();
    00521
    00526         void emerg(const std::string& message) throw();
    00527
    00532         inline bool isEmergEnabled() const throw() {
    00533             return isPriorityEnabled(Priority::EMERG);
    00534         };
    00535
    00540         inline CategoryStream emergStream() {
    00541             return getStream(Priority::EMERG);
    00542         };
    00543
    00552         void fatal(const char* stringFormat, ...) throw();
    00553
    00560         void fatal(const std::string& message) throw();
    00561
    00568         inline bool isFatalEnabled() const throw() {
    00569             return isPriorityEnabled(Priority::FATAL);
    00570         };
    00571
    00578         inline CategoryStream fatalStream() {
    00579             return getStream(Priority::FATAL);
    00580         };
    00581
    00587         virtual CategoryStream getStream(Priority::Value priority);
    00588
    00594         virtual CategoryStream operator<<(Priority::Value priority);
    00595
    00596         protected:
    00597
    00606         Category(const std::string& name, Category* parent,
    00607                                 Priority::Value priority = Priority::NOTSET);
    00608
    00609         virtual void _logUnconditionally(Priority::Value priority,
    00610                                          const char* format,
    00611                                          va_list arguments) throw();
    00612
    00618         virtual void _logUnconditionally2(Priority::Value priority,
    00619                                           const std::string& message) throw();
    00620
    00621         private:
    00622
    00623         /* prevent copying and assignment */
    00624         Category(const Category& other);
    00625         Category& operator=(const Category& other);
    00626
    00628         const std::string _name;
    00629
    00634         Category* _parent;
    00635
    00639         volatile Priority::Value _priority;
    00640
    00641         typedef std::map<Appender *, bool> OwnsAppenderMap;
    00642
    00649         virtual bool ownsAppender(Appender* appender,
    00650                                   OwnsAppenderMap::iterator& i2) throw();
    00651
    00652         AppenderSet _appender;
    00653         mutable threading::Mutex _appenderSetMutex;
    00654
    00660         OwnsAppenderMap _ownsAppender;
    00661
    00666         volatile bool _isAdditive;
    00667
    00668     };
    00669
    00670 }
    00671 #endif // _LOG4CPP_CATEGORY_HH