loggerpropertyconfigurator.php.svn-base

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

SVN-BASE
674
字号
        return $this->doConfigureProperties($properties, $repository);    }    /**     * Read configuration options from <b>properties</b>.     *     * @see doConfigure().     * @param array $properties     * @param LoggerHierarchy &$hierarchy     */    function doConfigureProperties($properties, &$hierarchy)    {        $value = null;        if (isset($properties[LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_LOGGER_DEBUG_KEY]))        {            $value = @$properties[LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_LOGGER_DEBUG_KEY];        }        if (!empty($value)) {            LoggerLog::internalDebugging(LoggerOptionConverter::toBoolean($value, LoggerLog::internalDebugging()));        }        $thresholdStr = '';        if (isset($properties[LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_THRESHOLD_PREFIX]))        {            $thresholdStr = @$properties[LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_THRESHOLD_PREFIX];        }        $hierarchy->setThreshold(LoggerOptionConverter::toLevel($thresholdStr, LoggerLevel::getLevelAll()));        $this->configureRootCategory($properties, $hierarchy);        $this->configureLoggerFactory($properties);        $this->parseCatsAndRenderers($properties, $hierarchy);        LoggerLog::debug("LoggerPropertyConfigurator::doConfigureProperties() Finished configuring.");        return true;    }    // --------------------------------------------------------------------------    // Internal stuff    // --------------------------------------------------------------------------    /**     * Check the provided <b>Properties</b> object for a     * {@link LoggerFactory} entry specified by     * {@link LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_LOGGER_FACTORY_KEY}.     *     * If such an entry exists, an attempt is made to create an instance using     * the default constructor.     * This instance is used for subsequent Category creations     * within this configurator.     *     * @see parseCatsAndRenderers()     * @param array $props array of properties     */    function configureLoggerFactory($props)    {        $factoryFqcn = null;        if (isset($props[LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_LOGGER_FACTORY_KEY]))        {            $factoryFqcn = @$props[LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_LOGGER_FACTORY_KEY];        }        if(!empty($factoryFqcn)) {            $factoryClassName = basename($factoryFqcn);            LoggerLog::debug(                "LoggerPropertyConfigurator::configureLoggerFactory() Trying to load factory [" .                $factoryClassName .                "]."            );            if (!class_exists($factoryClassName))                @include_once("{$factoryFqcn}.php");            if (class_exists($factoryClassName)) {                $loggerFactory = new $factoryClassName();            } else {                LoggerLog::debug(                    "LoggerPropertyConfigurator::configureLoggerFactory() Unable to load factory [" .                    $factoryClassName .                    "]. Using default."                );                $loggerFactory = $this->loggerFactory;            }            LoggerLog::debug(                "LoggerPropertyConfigurator::configureLoggerFactory() ".                "Setting properties for category factory [" . get_class($loggerFactory) . "]."            );            LoggerPropertySetter::setPropertiesByObject($loggerFactory, $props, LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_FACTORY_PREFIX . ".");        }    }    /**     * @param array $props array of properties     * @param LoggerHierarchy &$hierarchy     */    function configureRootCategory($props, &$hierarchy)    {        $effectivePrefix = LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_ROOT_LOGGER_PREFIX;        $value = @$props[LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_ROOT_LOGGER_PREFIX];        if(empty($value)) {            $value = @$props[LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_ROOT_CATEGORY_PREFIX];            $effectivePrefix = LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_ROOT_CATEGORY_PREFIX;        }        if (empty($value)) {            LoggerLog::debug(                "LoggerPropertyConfigurator::configureRootCategory() ".                "Could not find root logger information. Is this OK?"            );        } else {            $root = $hierarchy->getRootLogger();            // synchronized(root) {                $this->parseCategory(                $props,                $root,                $effectivePrefix,                LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_INTERNAL_ROOT_NAME,                $value            );            // }        }    }    /**     * Parse non-root elements, such non-root categories and renderers.     *     * @param array $props array of properties     * @param LoggerHierarchy &$hierarchy     */    function parseCatsAndRenderers($props, &$hierarchy)    {        while(list($key,$value) = each($props)) {            if( strpos($key, LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_CATEGORY_PREFIX) === 0 or                strpos($key, LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_LOGGER_PREFIX) === 0) {                    if(strpos($key, LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_CATEGORY_PREFIX) === 0) {                    $loggerName = substr($key, strlen(LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_CATEGORY_PREFIX));                    } elseif (strpos($key, LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_LOGGER_PREFIX) === 0) {                    $loggerName = substr($key, strlen(LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_LOGGER_PREFIX));                }                $logger =& $hierarchy->getLogger($loggerName, $this->loggerFactory);                    // synchronized(logger) {                    $this->parseCategory($props, $logger, $key, $loggerName, $value);                    $this->parseAdditivityForLogger($props, $logger, $loggerName);                    // }            } elseif (strpos($key, LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_RENDERER_PREFIX) === 0) {                $renderedClass = substr($key, strlen(LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_RENDERER_PREFIX));                    $renderingClass = $value;                if (method_exists($hierarchy, 'addrenderer')) { // ?                        LoggerRendererMap::addRenderer($hierarchy, $renderedClass, $renderingClass);                }                }        }    }    /**     * Parse the additivity option for a non-root category.     *     * @param array $props array of properties     * @param Logger &$cat     * @param string $loggerName     */    function parseAdditivityForLogger($props, &$cat, $loggerName)    {        $value = LoggerOptionConverter::findAndSubst(                    LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_ADDITIVITY_PREFIX . $loggerName,                                        $props                 );        LoggerLog::debug(            "LoggerPropertyConfigurator::parseAdditivityForLogger() ".            "Handling " . LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_ADDITIVITY_PREFIX . $loggerName . "=[{$value}]"        );        // touch additivity only if necessary        if(!empty($value)) {            $additivity = LoggerOptionConverter::toBoolean($value, true);            LoggerLog::debug(                "LoggerPropertyConfigurator::parseAdditivityForLogger() ".                "Setting additivity for [{$loggerName}] to [{$additivity}]"            );            $cat->setAdditivity($additivity);        }    }    /**     * This method must work for the root category as well.     *     * @param array $props array of properties     * @param Logger &$logger     * @param string $optionKey     * @param string $loggerName     * @param string $value     * @return Logger     */    public function parseCategory($props, &$logger, $optionKey, $loggerName, $value) {        LoggerLog::debug(            "LoggerPropertyConfigurator::parseCategory() ".            "Parsing for [{$loggerName}] with value=[{$value}]."        );        // We must skip over ',' but not white space        $st = explode(',', $value);        // If value is not in the form ", appender.." or "", then we should set        // the level of the loggeregory.        if(!(empty($value) || @$value[0] == ',')) {            // just to be on the safe side...            if(sizeof($st) == 0)                    return;            $levelStr = current($st);            LoggerLog::debug(                "LoggerPropertyConfigurator::parseCategory() ".                "Level token is [$levelStr]."            );            // If the level value is inherited, set category level value to            // null. We also check that the user has not specified inherited for the            // root category.            if('INHERITED' == strtoupper($levelStr) || 'NULL' == strtoupper($levelStr)) {                    if ($loggerName == LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_INTERNAL_ROOT_NAME) {                    LoggerLog::warn(                        "LoggerPropertyConfigurator::parseCategory() ".                        "The root logger cannot be set to null."                    );                    } else {                        $logger->setLevel(null);                    }            } else {                    $logger->setLevel(LoggerOptionConverter::toLevel($levelStr, LoggerLevel::getLevelDebug()));            }        }        // Begin by removing all existing appenders.        $logger->removeAllAppenders();        while($appenderName = next($st)) {            $appenderName = trim($appenderName);            if(empty($appenderName))                continue;            LoggerLog::debug(                "LoggerPropertyConfigurator::parseCategory() ".                "Parsing appender named [{$appenderName}]."            );            $appender = $this->parseAppender($props, $appenderName);            if($appender !== null) {                    $logger->addAppender($appender);            }        }    }    /**     * @param array $props array of properties     * @param string $appenderName     * @return LoggerAppender     */    function parseAppender($props, $appenderName)    {        $appender = LoggerAppender::singleton($appenderName);        if($appender !== null) {            LoggerLog::debug(                "LoggerPropertyConfigurator::parseAppender() ".                "Appender [{$appenderName}] was already parsed."            );            return $appender;        }        // Appender was not previously initialized.        $prefix = LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_APPENDER_PREFIX . $appenderName;        $layoutPrefix = $prefix . ".layout";        $appenderClass = @$props[$prefix];        if (!empty($appenderClass)) {            $appender = LoggerAppender::singleton($appenderName, $appenderClass);            if($appender === null) {                LoggerLog::warn(                    "LoggerPropertyConfigurator::parseAppender() ".                    "Could not instantiate appender named [$appenderName]."                );                return null;            }        } else {            LoggerLog::warn(                "LoggerPropertyConfigurator::parseAppender() ".                "Could not instantiate appender named [$appenderName] with null className."            );            return null;        }        $appender->setName($appenderName);        if( $appender->requiresLayout() ) {            LoggerLog::debug(                "LoggerPropertyConfigurator::parseAppender() ".                "Parsing layout section for [$appenderName]."            );            $layoutClass = @$props[$layoutPrefix];            $layoutClass = LoggerOptionConverter::substVars($layoutClass, $props);            if (empty($layoutClass)) {                LoggerLog::warn(                    "LoggerPropertyConfigurator::parseAppender() ".                    "layout class is empty in '$layoutPrefix'. Using Simple layout"                );                $layout = LoggerLayout::factory('LoggerLayoutSimple');            } else {                    $layout = LoggerLayout::factory($layoutClass);                    if($layout === null) {                        LoggerLog::warn(                        "LoggerPropertyConfigurator::parseAppender() ".                        "cannot create layout '$layoutClass'. Using Simple layout"                    );                    $layout = LoggerLayout::factory('LoggerLayoutSimple');                }            }            LoggerLog::debug(                "LoggerPropertyConfigurator::parseAppender() ".                "Parsing layout options for [$appenderName]."            );            LoggerPropertySetter::setPropertiesByObject($layout, $props, $layoutPrefix . ".");            LoggerLog::debug(                "LoggerPropertyConfigurator::parseAppender() ".                "End Parsing layout options for [$appenderName]."            );            $appender->setLayout($layout);        }        LoggerPropertySetter::setPropertiesByObject($appender, $props, $prefix . ".");        LoggerLog::debug(            "LoggerPropertyConfigurator::parseAppender() ".            "Parsed [{$appenderName}] options."        );        return $appender;    }}

⌨️ 快捷键说明

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