loggerappenderskeleton.php.svn-base

来自「PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。」· SVN-BASE 代码 · 共 338 行

SVN-BASE
338
字号
<?php/** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements.  See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License.  You may obtain a copy of the License at * *     http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * *  * @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  Marco Vassura * @author  Sergio Strampelli  * @version $Revision: 635069 $ * @package log4php * @abstract */abstract class LoggerAppenderSkeleton extends LoggerAppender {    /**     * @var boolean closed appender flag     */    protected $closed = false;        /**     * @var object unused     */    protected $errorHandler;               /**     * The first filter in the filter chain     * @var LoggerFilter     */    protected $headFilter = null;                /**     * LoggerLayout for this appender. It can be null if appender has its own layout     * @var LoggerLayout     */    protected $layout = null;                /**     * @var string Appender name     */    protected $name;               /**     * The last filter in the filter chain     * @var LoggerFilter     */    protected $tailFilter = null;                /**     * @var LoggerLevel There is no level threshold filtering by default.     */    protected $threshold = null;        /**     * @var boolean needs a layout formatting ?     */    protected $requiresLayout = false;        /**     * Constructor     *     * @param string $name appender name     */    public function __construct($name) {        $this->name = $name;        $this->clearFilters();    }    /**     * @param LoggerFilter $newFilter add a new LoggerFilter     * @see LoggerAppender::addFilter()     */    public 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.     */    abstract public function activateOptions();            /**     * Subclasses of {@link LoggerAppenderSkeleton} should implement      * this method to perform actual logging.     *     * @param LoggerLoggingEvent $event     * @see doAppend()     * @abstract     */    abstract protected function append($event);     /**     * @see LoggerAppender::clearFilters()     */    public function clearFilters()    {        unset($this->headFilter);        unset($this->tailFilter);        $this->headFilter = null;        $this->tailFilter = null;    }               /**     * Finalize this appender by calling the derived class' <i>close()</i> method.     */    public 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     */    public function getErrorHandler()    {        return $this->errorHandler;    }                /**     * @see LoggerAppender::getFilter()     * @return LoggerFilter     */    public 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 LoggerFilter     */    public function getFirstFilter()    {        return $this->headFilter;    }                /**     * @see LoggerAppender::getLayout()     * @return LoggerLayout     */    public function getLayout()    {        return $this->layout;    }               /**     * @see LoggerAppender::getName()     * @return string     */    public function getName()    {        return $this->name;    }        /**     * Returns this appenders threshold level.      * See the {@link setThreshold()} method for the meaning of this option.     * @return LoggerLevel     */    public 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       */    public function isAsSevereAsThreshold($priority)    {        if ($this->threshold === null)            return true;                    return $priority->isGreaterOrEqual($this->getThreshold());    }        /**     * @see LoggerAppender::doAppend()     * @param LoggerLoggingEvent $event     */    public 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->getNext();            }        }        $this->append($event);        }                            /**     * @see LoggerAppender::requiresLayout()     * @return boolean     */    public function requiresLayout()    {        return $this->requiresLayout;    }                /**     * @see LoggerAppender::setErrorHandler()     * @param object     */    public 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     */    public function setLayout($layout)    {        if ($this->requiresLayout())            $this->layout = $layout;    }      /**     * @see LoggerAppender::setName()     * @param string $name     */    public 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()     */    public function setThreshold($threshold)    {        if (is_string($threshold)) {           $this->threshold = LoggerOptionConverter::toLevel($threshold, null);        }elseif ($threshold instanceof 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 de-serialization.     *     * Call {@link activateOptions()} to properly setup the appender.     */    function __wakeup()    {        $this->activateOptions();    }    }

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?