123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- /*
- * Filter.hh
- *
- * Copyright 2001, LifeLine Networks BV (www.lifeline.nl). All rights reserved.
- * Copyright 2001, Bastiaan Bakker. All rights reserved.
- *
- * See the COPYING file for the terms of usage and distribution.
- */
- #ifndef _LOG4CPP_FILTER_HH
- #define _LOG4CPP_FILTER_HH
- #include <log4cpp/Portability.hh>
- #include <log4cpp/LoggingEvent.hh>
- namespace log4cpp {
- /**
- Users should extend this class to implement customized logging
- event filtering. Note that log4cpp::Category and
- lof4cpp::Appender have built-in filtering rules. It is suggested
- that you first use and understand the built-in rules before rushing
- to write your own custom filters.
- <p>This abstract class assumes and also imposes that filters be
- organized in a linear chain. The <code>decide(LoggingEvent)</code>
- method of each filter is called sequentially, in the order of their
- addition to the chain.
-
- <p>The <code>decide(LoggingEvent)</code> method must return a
- Decision value, either DENY, NEUTRAL or ACCCEPT.
- <p>If the value DENY is returned, then the log event is
- dropped immediately without consulting with the remaining
- filters.
-
- <p>If the value NEUTRAL is returned, then the next filter
- in the chain is consulted. If there are no more filters in the
- chain, then the log event is logged. Thus, in the presence of no
- filters, the default behaviour is to log all logging events.
-
- <p>If the value ACCEPT is returned, then the log
- event is logged without consulting the remaining filters.
-
- <p>The philosophy of log4cpp filters is largely inspired from the
- Linux ipchains.
- **/
- class LOG4CPP_EXPORT Filter {
- public:
-
- typedef enum { DENY = -1,
- NEUTRAL = 0,
- ACCEPT = 1
- } Decision;
- /**
- * Default Constructor for Filter
- **/
- Filter();
- /**
- * Destructor for Filter
- **/
- virtual ~Filter();
- /**
- * Set the next Filter in the Filter chain
- * @param filter The filter to chain
- **/
- virtual void setChainedFilter(Filter* filter);
- /**
- * Get the next Filter in the Filter chain
- * @return The next Filter or NULL if the current filter is the last
- * in the chain
- **/
- virtual Filter* getChainedFilter();
- /**
- * Get the last Filter in the Filter chain
- * @return The last Filter in the Filter chain
- **/
- virtual Filter* getEndOfChain();
- /**
- * Add a Filter to the end of the Filter chain. Convience method for
- * getEndOfChain()->setChainedFilter(filter).
- * @param filter The filter to add to the end of the chain.
- **/
- virtual void appendChainedFilter(Filter* filter);
- /**
- * Decide whether to accept or deny a LoggingEvent. This method will
- * walk the entire chain until a non neutral decision has been made
- * or the end of the chain has been reached.
- * @param event The LoggingEvent to decide on.
- * @return The Decision
- **/
- virtual Decision decide(const LoggingEvent& event);
- protected:
- /**
- * Decide whether <b>this</b> Filter accepts or denies the given
- * LoggingEvent. Actual implementation of Filter should override this
- * method and not <code>decide(LoggingEvent&)</code>.
- * @param event The LoggingEvent to decide on.
- * @return The Decision
- **/
- virtual Decision _decide(const LoggingEvent& event) = 0;
- private:
- Filter* _chainedFilter;
- };
- }
- #endif // _LOG4CPP_FILTER_HH
|