Author: ihabunek
Date: Tue Feb  7 12:17:21 2012
New Revision: 1241439

URL: http://svn.apache.org/viewvc?rev=1241439&view=rev
Log:
LOG4PHP-168: Fixed a bug which prevented configuration by passing a 
LoggerConfigurator instance.

Modified:
    logging/log4php/trunk/src/changes/changes.xml
    logging/log4php/trunk/src/main/php/Logger.php
    logging/log4php/trunk/src/site/xdoc/docs/configuration.xml

Modified: logging/log4php/trunk/src/changes/changes.xml
URL: 
http://svn.apache.org/viewvc/logging/log4php/trunk/src/changes/changes.xml?rev=1241439&r1=1241438&r2=1241439&view=diff
==============================================================================
--- logging/log4php/trunk/src/changes/changes.xml (original)
+++ logging/log4php/trunk/src/changes/changes.xml Tue Feb  7 12:17:21 2012
@@ -21,6 +21,7 @@
        </properties>
        <body>
            <release version="2.2.1-SNAPSHOT" date="SVN">
+               <action date="2011-02-07" type="fix" issue="LOG4PHP-168" 
dev="Ivan Habunek">Fixed a bug which prevented configuration by passing a 
LoggerConfigurator instance.</action>
                <action date="2012-01-29" type="fix" issue="LOG4PHP-167" 
dev="Ivan Habunek">Fixed a bug which prevented parsing of INI configuration 
files when using PHP 5.2.x.</action>
                <action date="2011-12-22" type="update" issue="LOG4PHP-166" 
dev="Ivan Habunek" due-to="David Hilowitz" due-to-email="dhilowitz at gmail dot 
com">Added connection timeout parameter to MongoDB appender.</action>
            </release>

Modified: logging/log4php/trunk/src/main/php/Logger.php
URL: 
http://svn.apache.org/viewvc/logging/log4php/trunk/src/main/php/Logger.php?rev=1241439&r1=1241438&r2=1241439&view=diff
==============================================================================
--- logging/log4php/trunk/src/main/php/Logger.php (original)
+++ logging/log4php/trunk/src/main/php/Logger.php Tue Feb  7 12:17:21 2012
@@ -506,13 +506,14 @@ class Logger {
         * @param string|array $configuration Either a path to the configuration
         *   file, or a configuration array.
         *   
-        * @param mixed $configuratorClass A custom configurator class: either 
a 
-        * class name (string), or an object which implements LoggerConfigurator
-        * interface. If left empty, the default configurator will be used. 
+        * @param string|LoggerConfigurator $configurator A custom 
+        * configurator class: either a class name (string), or an object which 
+        * implements the LoggerConfigurator interface. If left empty, the 
default
+        * configurator implementation will be used. 
         */
-       public static function configure($configuration = null, 
$configuratorClass = null) {
+       public static function configure($configuration = null, $configurator = 
null) {
                self::resetConfiguration();
-               $configurator = self::getConfigurator($configuratorClass);
+               $configurator = self::getConfigurator($configurator);
                $configurator->configure(self::getHierarchy(), $configuration);
                self::$initialized = true;
        }
@@ -522,26 +523,41 @@ class Logger {
         * configurator class. If no class is given, returns an instance of
         * the default configurator.
         * 
-        * @param string $configuratorClass The configurator class.
+        * @param string|LoggerConfigurator $configurator The configurator 
class 
+        * or LoggerConfigurator instance.
         */
-       private static function getConfigurator($configuratorClass = null) {
-               if (empty($configuratorClass)) {
+       private static function getConfigurator($configurator = null) {
+               if ($configurator === null) {
                        return new LoggerConfiguratorDefault();
                }
                
-               if (!class_exists($configuratorClass)) {
-                       $this->warn("Specified configurator class 
[$configuratorClass] does not exist. Reverting to default configurator.");
-                       return new LoggerConfiguratorDefault();
+               if (is_object($configurator)) {
+                       if ($configurator instanceof LoggerConfigurator) {
+                               return $configurator;
+                       } else {
+                               trigger_error("log4php: Given configurator 
object [$configurator] does not implement the LoggerConfigurator interface. 
Reverting to default configurator.", E_USER_WARNING);
+                               return new LoggerConfiguratorDefault();
+                       }
                }
                
-               $configurator = new $configuratorClass();
+               if (is_string($configurator)) {
+                       if (!class_exists($configurator)) {
+                               trigger_error("log4php: Specified configurator 
class [$configurator] does not exist. Reverting to default configurator.", 
E_USER_WARNING);
+                               return new LoggerConfiguratorDefault();
+                       }
                        
-               if (!($configurator instanceof LoggerConfigurator)) {
-                       $this->warn("Specified configurator class 
[$configuratorClass] does not implement the LoggerConfigurator interface. 
Reverting to default configurator.");
-                       return new LoggerConfiguratorDefault();
+                       $instance = new $configurator();
+                               
+                       if (!($instance instanceof LoggerConfigurator)) {
+                               trigger_error("log4php: Specified configurator 
class [$configurator] does not implement the LoggerConfigurator interface. 
Reverting to default configurator.", E_USER_WARNING);
+                               return new LoggerConfiguratorDefault();
+                       }
+                       
+                       return $instance;
                }
                
-               return $configurator;
+               trigger_error("log4php: Invalid configurator specified. 
Expected either a string or a LoggerConfigurator instance. Reverting to default 
configurator.", E_USER_WARNING);
+               return new LoggerConfiguratorDefault();
        }
        
        /**

Modified: logging/log4php/trunk/src/site/xdoc/docs/configuration.xml
URL: 
http://svn.apache.org/viewvc/logging/log4php/trunk/src/site/xdoc/docs/configuration.xml?rev=1241439&r1=1241438&r2=1241439&view=diff
==============================================================================
--- logging/log4php/trunk/src/site/xdoc/docs/configuration.xml (original)
+++ logging/log4php/trunk/src/site/xdoc/docs/configuration.xml Tue Feb  7 
12:17:21 2012
@@ -248,20 +248,23 @@ class MyConfigurator implements LoggerCo
 }
 </pre>
 
-                               <p>To use the configurator, pass it as a second 
parameter to <code>Logger::configure()</code> 
-                               (either the name of the class as a string or an 
instance).</p>
+                               <p>To use the configurator, pass it as a second 
parameter to <code>Logger::configure()</code> (either 
+                                   the name of the class as a string or an 
instance). Any value passed as <code>$configuration</code>
+                                   will be available in the configure() method 
of the LoggerConfigurator as <code>$input</code>.</p>
 
-<pre class="prettyprint">
-Logger::configure(null, 'MyConfigurator');
+<pre class="prettyprint linenums">
+// User defined configuration (optional) 
+$configuration = array(
+    'foo' => 1,
+    'bar' => 2
+);
 
-$log = Logger::getRootLogger();
-$log->trace('one');
-$log->debug('two');
-$log->info('three');
-$log->warn('four');
-$log->error('five');
-</pre>
+// Passing the configurator as string
+Logger::configure($configuration, 'MyConfigurator');
 
+// Passing the configurator as an instance
+Logger::configure($configuration, new MyConfigurator());
+</pre>
                                <div class="alert-message block-message warn">
                                        <p><strong>Note: </strong>Always call 
<code>activateOptions()</code> on all appenders, filters and layouts after 
setting
                                        their configuration parameters. 
Otherwise, the configuration may not be properly activated.</p>


Reply via email to