loggerpropertyconfigurator.php
来自「PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。」· PHP 代码 · 共 674 行 · 第 1/2 页
PHP
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 + -
显示快捷键?