diff --git a/library/log4php/filters/LoggerFilterLevelMatch.php b/library/log4php/filters/LoggerFilterLevelMatch.php new file mode 100644 --- /dev/null +++ b/library/log4php/filters/LoggerFilterLevelMatch.php @@ -0,0 +1,100 @@ +The filter admits two options LevelToMatch and + * AcceptOnMatch. If there is an exact match between the value + * of the LevelToMatch option and the level of the + * {@link LoggerLoggingEvent}, then the {@link decide()} method returns + * {@link LoggerFilter::ACCEPT} in case the AcceptOnMatch + * option value is set to true, if it is false then + * {@link LoggerFilter::DENY} is returned. If there is no match, + * {@link LoggerFilter::NEUTRAL} is returned.

+ * + *

+ * An example for this filter: + * + * {@example ../../examples/php/filter_levelmatch.php 19} + * + *

+ * The corresponding XML file: + * + * {@example ../../examples/resources/filter_levelmatch.xml 18} + * + * @version $Revision: 1213283 $ + * @package log4php + * @subpackage filters + * @since 0.6 + */ +class LoggerFilterLevelMatch extends LoggerFilter { + + /** + * Indicates if this event should be accepted or denied on match + * @var boolean + */ + protected $acceptOnMatch = true; + + /** + * The level, when to match + * @var LoggerLevel + */ + protected $levelToMatch; + + /** + * @param boolean $acceptOnMatch + */ + public function setAcceptOnMatch($acceptOnMatch) { + $this->setBoolean('acceptOnMatch', $acceptOnMatch); + } + + /** + * @param string $l the level to match + */ + public function setLevelToMatch($level) { + $this->setLevel('levelToMatch', $level); + } + + /** + * Return the decision of this filter. + * + * Returns {@link LoggerFilter::NEUTRAL} if the LevelToMatch + * option is not set or if there is not match. Otherwise, if there is a + * match, then the returned decision is {@link LoggerFilter::ACCEPT} if the + * AcceptOnMatch property is set to true. The + * returned decision is {@link LoggerFilter::DENY} if the + * AcceptOnMatch property is set to false. + * + * @param LoggerLoggingEvent $event + * @return integer + */ + public function decide(LoggerLoggingEvent $event) { + if ($this->levelToMatch === null) { + return LoggerFilter::NEUTRAL; + } + + if ($this->levelToMatch->equals($event->getLevel())) { + return $this->acceptOnMatch ? LoggerFilter::ACCEPT : LoggerFilter::DENY; + } else { + return LoggerFilter::NEUTRAL; + } + } +}