123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355 |
- <?php
- /**
- * log4php is a PHP port of the log4j java logging package.
- *
- * <p>This framework is based on log4j (see {@link http://jakarta.apache.org/log4j log4j} for details).</p>
- * <p>Design, strategies and part of the methods documentation are developed by log4j team
- * (Ceki Gülcü as log4j project founder and
- * {@link http://jakarta.apache.org/log4j/docs/contributors.html contributors}).</p>
- *
- * <p>PHP port, extensions and modifications by VxR. All rights reserved.<br>
- * For more information, please see {@link http://www.vxr.it/log4php/}.</p>
- *
- * <p>This software is published under the terms of the LGPL License
- * a copy of which has been included with this distribution in the LICENSE file.</p>
- *
- * @package log4php
- */
- /**
- * @ignore
- */
- if (!defined('LOG4PHP_DIR')) define('LOG4PHP_DIR', dirname(__FILE__));
-
- /**
- */
- require_once(LOG4PHP_DIR . '/LoggerAppender.php');
- require_once(LOG4PHP_DIR . '/LoggerLog.php');
- require_once(LOG4PHP_DIR . '/helpers/LoggerOptionConverter.php');
- /**
- * Abstract superclass of the other appenders in the package.
- *
- * This class provides the code for common functionality, such as
- * support for threshold filtering and support for general filters.
- *
- * @author VxR <vxr@vxr.it>
- * @author Sergio Strampelli <sergio@ascia.net>
- * @version $Revision: 1.1 $
- * @package log4php
- * @abstract
- */
- class LoggerAppenderSkeleton extends LoggerAppender {
- /**
- * @var boolean closed appender flag
- */
- var $closed;
-
- /**
- * @var object unused
- */
- var $errorHandler;
-
- /**
- * The first filter in the filter chain
- * @var LoggerFilter
- */
- var $headFilter = null;
-
- /**
- * LoggerLayout for this appender. It can be null if appender has its own layout
- * @var LoggerLayout
- */
- var $layout = null;
-
- /**
- * @var string Appender name
- */
- var $name;
-
- /**
- * The last filter in the filter chain
- * @var LoggerFilter
- */
- var $tailFilter = null;
-
- /**
- * @var LoggerLevel There is no level threshold filtering by default.
- */
- var $threshold = null;
-
- /**
- * @var boolean needs a layout formatting ?
- */
- var $requiresLayout = false;
-
- /* --------------------------------------------------------------------------*/
- /* --------------------------------------------------------------------------*/
- /* --------------------------------------------------------------------------*/
-
- /**
- * Constructor
- *
- * @param string $name appender name
- */
- function LoggerAppenderSkeleton($name)
- {
- $this->name = $name;
- $this->clearFilters();
- }
- /**
- * @param LoggerFilter $newFilter add a new LoggerFilter
- * @see LoggerAppender::addFilter()
- */
- function addFilter($newFilter)
- {
- if($this->headFilter === null) {
- $this->headFilter = $newFilter;
- $this->tailFilter =& $this->headFilter;
- } else {
- $this->tailFilter->next = $newFilter;
- $this->tailFilter =& $this->tailFilter->next;
- }
- }
-
- /**
- * Derived appenders should override this method if option structure
- * requires it.
- */
- function activateOptions()
- {
- }
-
- /**
- * Subclasses of {@link LoggerAppenderSkeleton} should implement
- * this method to perform actual logging.
- *
- * @param LoggerLoggingEvent $event
- * @see doAppend()
- * @abstract
- */
- function append($event)
- {
- // override me
- }
-
- /**
- * @see LoggerAppender::clearFilters()
- */
- function clearFilters()
- {
- unset($this->headFilter);
- unset($this->tailFilter);
- $this->headFilter = null;
- $this->tailFilter = null;
- }
-
- /**
- * @see LoggerAppender::close()
- */
- function close()
- {
- //override me
- }
-
- /**
- * Finalize this appender by calling the derived class' <i>close()</i> method.
- */
- function finalize()
- {
- // An appender might be closed then garbage collected. There is no
- // point in closing twice.
- if ($this->closed) return;
-
- LoggerLog::debug("LoggerAppenderSkeleton::finalize():name=[{$this->name}].");
-
- $this->close();
- }
-
- /**
- * Do not use this method.
- * @see LoggerAppender::getErrorHandler()
- * @return object
- */
- function &getErrorHandler()
- {
- return $this->errorHandler;
- }
-
- /**
- * @see LoggerAppender::getFilter()
- * @return Filter
- */
- function &getFilter()
- {
- return $this->headFilter;
- }
- /**
- * Return the first filter in the filter chain for this Appender.
- * The return value may be <i>null</i> if no is filter is set.
- * @return Filter
- */
- function &getFirstFilter()
- {
- return $this->headFilter;
- }
-
- /**
- * @see LoggerAppender::getLayout()
- * @return LoggerLayout
- */
- function &getLayout()
- {
- return $this->layout;
- }
-
- /**
- * @see LoggerAppender::getName()
- * @return string
- */
- function getName()
- {
- return $this->name;
- }
-
- /**
- * Returns this appenders threshold level.
- * See the {@link setThreshold()} method for the meaning of this option.
- * @return LoggerLevel
- */
- function &getThreshold()
- {
- return $this->threshold;
- }
-
- /**
- * Check whether the message level is below the appender's threshold.
- *
- *
- * If there is no threshold set, then the return value is always <i>true</i>.
- * @param LoggerLevel $priority
- * @return boolean true if priority is greater or equal than threshold
- */
- function isAsSevereAsThreshold($priority)
- {
- if ($this->threshold === null)
- return true;
-
- return $priority->isGreaterOrEqual($this->getThreshold());
- }
-
- /**
- * @see LoggerAppender::doAppend()
- * @param LoggerLoggingEvent $event
- */
- function doAppend($event)
- {
- LoggerLog::debug("LoggerAppenderSkeleton::doAppend()");
- if ($this->closed) {
- LoggerLog::debug("LoggerAppenderSkeleton::doAppend() Attempted to append to closed appender named [{$this->name}].");
- return;
- }
- if(!$this->isAsSevereAsThreshold($event->getLevel())) {
- LoggerLog::debug("LoggerAppenderSkeleton::doAppend() event level is less severe than threshold.");
- return;
- }
- $f = $this->getFirstFilter();
-
- while($f !== null) {
- switch ($f->decide($event)) {
- case LOG4PHP_LOGGER_FILTER_DENY: return;
- case LOG4PHP_LOGGER_FILTER_ACCEPT: return $this->append($event);
- case LOG4PHP_LOGGER_FILTER_NEUTRAL: $f = $f->next;
- }
- }
- $this->append($event);
- }
-
-
- /**
- * @see LoggerAppender::requiresLayout()
- * @return boolean
- */
- function requiresLayout()
- {
- return $this->requiresLayout;
- }
-
- /**
- * @see LoggerAppender::setErrorHandler()
- * @param object
- */
- function setErrorHandler($errorHandler)
- {
- if($errorHandler == null) {
- // We do not throw exception here since the cause is probably a
- // bad config file.
- LoggerLog::warn("You have tried to set a null error-handler.");
- } else {
- $this->errorHandler = $errorHandler;
- }
- }
-
- /**
- * @see LoggerAppender::setLayout()
- * @param LoggerLayout $layout
- */
- function setLayout($layout)
- {
- if ($this->requiresLayout())
- $this->layout = $layout;
- }
-
- /**
- * @see LoggerAppender::setName()
- * @param string $name
- */
- function setName($name)
- {
- $this->name = $name;
- }
-
- /**
- * Set the threshold level of this appender.
- *
- * @param mixed $threshold can be a {@link LoggerLevel} object or a string.
- * @see LoggerOptionConverter::toLevel()
- */
- function setThreshold($threshold)
- {
- if (is_string($threshold)) {
- $this->threshold = LoggerOptionConverter::toLevel($threshold, null);
- }elseif (is_a($threshold, 'loggerlevel')) {
- $this->threshold = $threshold;
- }
- }
-
- /**
- * Perform actions before object serialization.
- *
- * Call {@link finalize()} to properly close the appender.
- */
- function __sleep()
- {
- $this->finalize();
- return array_keys(get_object_vars($this));
- }
-
- /**
- * Perform actions after object deserialization.
- *
- * Call {@link activateOptions()} to properly setup the appender.
- */
- function __wakeup()
- {
- $this->activateOptions();
- }
-
- }
- ?>
|