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 + -
显示快捷键?