This abstract class assumes and also imposes that filters be * organized in a linear chain. The {@link #decide * decide(LoggerLoggingEvent)} method of each filter is called sequentially, * in the order of their addition to the chain. * *

The {@link decide()} method must return one * of the integer constants {@link LoggerFilter::DENY}, * {@link LoggerFilter::NEUTRAL} or {@link LoggerFilter::ACCEPT}. * *

If the value {@link LoggerFilter::DENY} is returned, then the log event is * dropped immediately without consulting with the remaining * filters. * *

If the value {@link LoggerFilter::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. * *

If the value {@link LoggerFilter::ACCEPT} is returned, then the log * event is logged without consulting the remaining filters. * *

The philosophy of log4php filters is largely inspired from the * Linux ipchains. * * @version $Revision$ * @package log4php */ abstract class LoggerFilter { /** * The log event must be logged immediately without consulting with * the remaining filters, if any, in the chain. */ const ACCEPT = 1; /** * This filter is neutral with respect to the log event. The * remaining filters, if any, should be consulted for a final decision. */ const NEUTRAL = 0; /** * The log event must be dropped immediately without consulting * with the remaining filters, if any, in the chain. */ const DENY = -1; /** * @var LoggerFilter Points to the next {@link LoggerFilter} in the filter chain. */ protected $next; /** * Usually filters options become active when set. We provide a * default do-nothing implementation for convenience. */ public function activateOptions() { } /** * Decide what to do. *

If the decision is {@link LoggerFilter::DENY}, then the event will be * dropped. If the decision is {@link LoggerFilter::NEUTRAL}, then the next * filter, if any, will be invoked. If the decision is {@link LoggerFilter::ACCEPT} then * the event will be logged without consulting with other filters in * the chain. * * @param LoggerLoggingEvent $event The {@link LoggerLoggingEvent} to decide upon. * @return integer {@link LoggerFilter::NEUTRAL} or {@link LoggerFilter::DENY}|{@link LoggerFilter::ACCEPT} */ public function decide(LoggerLoggingEvent $event) { return self::NEUTRAL; } /** * Adds a new filter to the filter chain this filter is a part of. * If this filter has already and follow up filter, the param filter * is passed on until it is the last filter in chain. * * @param $filter - the filter to add to this chain */ public function addNext($filter) { if($this->next !== null) { $this->next->addNext($filter); } else { $this->next = $filter; } } /** * Returns the next filter in this chain * @return the next filter */ public function getNext() { return $this->next; } }