You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
161 lines
5.2 KiB
161 lines
5.2 KiB
<?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
|
|
* @subpackage config
|
|
*/
|
|
|
|
/**
|
|
* @ignore
|
|
*/
|
|
if (!defined('LOG4PHP_DIR')) define('LOG4PHP_DIR', dirname(__FILE__) . '/..');
|
|
|
|
require_once(LOG4PHP_DIR . '/LoggerLog.php');
|
|
require_once(LOG4PHP_DIR . '/helpers/LoggerOptionConverter.php');
|
|
|
|
/**
|
|
* General purpose Object property setter. Clients repeatedly invokes
|
|
* {@link setProperty()} in order to invoke setters
|
|
* on the Object specified in the constructor.
|
|
*
|
|
* Usage:
|
|
* <code>
|
|
* $ps = new LoggerPropertySetter($anObject);
|
|
* $ps->set("name", "Joe");
|
|
* $ps->set("age", 32);
|
|
* $ps->set("isMale", true);
|
|
* </code>
|
|
* will cause the invocations
|
|
* <code>
|
|
* $anObject->setName("Joe");
|
|
* $anObject->setAge(32);
|
|
* $anObject->setMale(true)
|
|
* </code>
|
|
* if such methods exist.
|
|
*
|
|
* @author VxR <vxr@vxr.it>
|
|
* @version $Revision: 1.1 $
|
|
* @package log4php
|
|
* @subpackage config
|
|
* @since 0.5
|
|
*/
|
|
class LoggerPropertySetter {
|
|
|
|
/**
|
|
* @var object the target object
|
|
* @access private
|
|
*/
|
|
var $obj;
|
|
|
|
/**
|
|
* Create a new LoggerPropertySetter for the specified Object.
|
|
* This is done in prepartion for invoking {@link setProperty()}
|
|
* one or more times.
|
|
* @param object &$obj the object for which to set properties
|
|
*/
|
|
function LoggerPropertySetter(&$obj)
|
|
{
|
|
$this->obj =& $obj;
|
|
}
|
|
|
|
/**
|
|
* Set the properties of an object passed as a parameter in one
|
|
* go. The <code>properties</code> are parsed relative to a
|
|
* <code>prefix</code>.
|
|
*
|
|
* @param object &$obj The object to configure.
|
|
* @param array $properties An array containing keys and values.
|
|
* @param string $prefix Only keys having the specified prefix will be set.
|
|
* @static
|
|
*/
|
|
function setPropertiesByObject(&$obj, $properties, $prefix)
|
|
{
|
|
$pSetter = new LoggerPropertySetter($obj);
|
|
return $pSetter->setProperties($properties, $prefix);
|
|
}
|
|
|
|
|
|
/**
|
|
* Set the properites for the object that match the
|
|
* <code>prefix</code> passed as parameter.
|
|
*
|
|
* @param array $properties An array containing keys and values.
|
|
* @param string $prefix Only keys having the specified prefix will be set.
|
|
*/
|
|
function setProperties($properties, $prefix)
|
|
{
|
|
LoggerLog::debug("LoggerOptionConverter::setProperties():prefix=[{$prefix}]");
|
|
|
|
$len = strlen($prefix);
|
|
while (list($key,) = each($properties)) {
|
|
if (strpos($key, $prefix) === 0) {
|
|
if (strpos($key, '.', ($len + 1)) > 0)
|
|
continue;
|
|
$value = LoggerOptionConverter::findAndSubst($key, $properties);
|
|
$key = substr($key, $len);
|
|
if ($key == 'layout' and is_a($this->obj, 'loggerappender')) {
|
|
continue;
|
|
}
|
|
$this->setProperty($key, $value);
|
|
}
|
|
}
|
|
$this->activate();
|
|
}
|
|
|
|
/**
|
|
* Set a property on this PropertySetter's Object. If successful, this
|
|
* method will invoke a setter method on the underlying Object. The
|
|
* setter is the one for the specified property name and the value is
|
|
* determined partly from the setter argument type and partly from the
|
|
* value specified in the call to this method.
|
|
*
|
|
* <p>If the setter expects a String no conversion is necessary.
|
|
* If it expects an int, then an attempt is made to convert 'value'
|
|
* to an int using new Integer(value). If the setter expects a boolean,
|
|
* the conversion is by new Boolean(value).
|
|
*
|
|
* @param string $name name of the property
|
|
* @param string $value String value of the property
|
|
*/
|
|
function setProperty($name, $value)
|
|
{
|
|
LoggerLog::debug("LoggerOptionConverter::setProperty():name=[{$name}]:value=[{$value}]");
|
|
|
|
if ($value === null) return;
|
|
|
|
$method = "set" . ucfirst($name);
|
|
|
|
if (!method_exists($this->obj, $method)) {
|
|
LoggerLog::warn(
|
|
"LoggerOptionConverter::setProperty() No such setter method for [{$name}] property in " .
|
|
get_class($this->obj) . "."
|
|
);
|
|
} else {
|
|
return call_user_func(array(&$this->obj, $method), $value);
|
|
}
|
|
}
|
|
|
|
function activate()
|
|
{
|
|
LoggerLog::debug("LoggerOptionConverter::activate()");
|
|
|
|
if (method_exists($this->obj, 'activateoptions')) {
|
|
return call_user_func(array(&$this->obj, 'activateoptions'));
|
|
} else {
|
|
LoggerLog::debug("LoggerOptionConverter::activate() Nothing to activate.");
|
|
}
|
|
}
|
|
}
|
|
?>
|