Author: floriansemm
Date: Sat Mar 10 18:57:37 2012
New Revision: 1299253

URL: http://svn.apache.org/viewvc?rev=1299253&view=rev
Log:
LOG4PHP-141 - Allow setting of a default Renderer for all Classes

Added:
    logging/log4php/trunk/src/main/php/renderers/LoggerRenderer.php   
(contents, props changed)
      - copied, changed from r1243083, 
logging/log4php/trunk/src/main/php/renderers/LoggerRendererObject.php
    logging/log4php/trunk/src/main/php/renderers/LoggerRendererObject.php
    logging/log4php/trunk/src/test/php/renderers/LoggerRendererObjectTest.php
Modified:
    logging/log4php/trunk/src/main/php/LoggerAutoloader.php
    logging/log4php/trunk/src/main/php/LoggerThrowableInformation.php
    
logging/log4php/trunk/src/main/php/configurators/LoggerConfiguratorDefault.php
    logging/log4php/trunk/src/main/php/renderers/LoggerRendererDefault.php
    logging/log4php/trunk/src/main/php/renderers/LoggerRendererException.php
    logging/log4php/trunk/src/main/php/renderers/LoggerRendererMap.php
    logging/log4php/trunk/src/test/php/LoggerConfiguratorTest.php
    logging/log4php/trunk/src/test/php/LoggerLoggingEventTest.php
    logging/log4php/trunk/src/test/php/renderers/LoggerRendererMapTest.php

Modified: logging/log4php/trunk/src/main/php/LoggerAutoloader.php
URL: 
http://svn.apache.org/viewvc/logging/log4php/trunk/src/main/php/LoggerAutoloader.php?rev=1299253&r1=1299252&r2=1299253&view=diff
==============================================================================
--- logging/log4php/trunk/src/main/php/LoggerAutoloader.php (original)
+++ logging/log4php/trunk/src/main/php/LoggerAutoloader.php Sat Mar 10 18:57:37 
2012
@@ -125,7 +125,8 @@ class LoggerAutoloader {
                'LoggerRendererDefault' => 
'/renderers/LoggerRendererDefault.php',
                'LoggerRendererException' => 
'/renderers/LoggerRendererException.php',
                'LoggerRendererMap' => '/renderers/LoggerRendererMap.php',
-               'LoggerRendererObject' => '/renderers/LoggerRendererObject.php',
+               'LoggerRenderer' => '/renderers/LoggerRenderer.php',
+               'LoggerRendererObject'  => 
'/renderers/LoggerRendererObject.php',
        );
        
        /**

Modified: logging/log4php/trunk/src/main/php/LoggerThrowableInformation.php
URL: 
http://svn.apache.org/viewvc/logging/log4php/trunk/src/main/php/LoggerThrowableInformation.php?rev=1299253&r1=1299252&r2=1299253&view=diff
==============================================================================
--- logging/log4php/trunk/src/main/php/LoggerThrowableInformation.php (original)
+++ logging/log4php/trunk/src/main/php/LoggerThrowableInformation.php Sat Mar 
10 18:57:37 2012
@@ -61,12 +61,8 @@ class LoggerThrowableInformation {
         */
        public function getStringRepresentation() {
                if (!is_array($this->throwableArray)) {
-                       $renderer = 
Logger::getHierarchy()->getRendererMap()->getByClassName(get_class($this->throwable));
+                       $renderer = new LoggerRendererException();
                        
-                       // TODO: why this?
-                       if ($renderer instanceof LoggerRendererDefault) {
-                               $renderer = new LoggerRendererException();
-                       }
                        $this->throwableArray = explode("\n", 
$renderer->render($this->throwable));
                }
                

Modified: 
logging/log4php/trunk/src/main/php/configurators/LoggerConfiguratorDefault.php
URL: 
http://svn.apache.org/viewvc/logging/log4php/trunk/src/main/php/configurators/LoggerConfiguratorDefault.php?rev=1299253&r1=1299252&r2=1299253&view=diff
==============================================================================
--- 
logging/log4php/trunk/src/main/php/configurators/LoggerConfiguratorDefault.php 
(original)
+++ 
logging/log4php/trunk/src/main/php/configurators/LoggerConfiguratorDefault.php 
Sat Mar 10 18:57:37 2012
@@ -223,26 +223,34 @@ class LoggerConfiguratorDefault implemen
                        foreach($config['renderers'] as $rendererConfig) {
                                $this->configureRenderer($hierarchy, 
$rendererConfig);
                        }
+                       
+                       
                }
        }
        
        private function configureRenderer(LoggerHierarchy $hierarchy, $config) 
{
+               if (isset($config['defaultObjectRenderer'])) {
+                       $objectRendererClass = 
$config['defaultObjectRenderer']; 
+                       $this->existsRendererClass($objectRendererClass);
+                       $objectRendererInstance = new $objectRendererClass;
+                       
$this->isRendererClassLoggerRenderer($objectRendererInstance, 
$objectRendererClass);
+                       
+                       
$hierarchy->getRendererMap()->setDefaultObjectRenderer($objectRendererInstance);
+                       return;
+               }
+               
+               
                if (!isset($config['renderingClass'])) {
                        $this->warn("Rendering class not specified. Skipping 
renderers definition.");
                        return;                 
                }
                
                $renderingClass = $config['renderingClass'];
-               if (!class_exists($renderingClass)) {
-                       $this->warn("Nonexistant rendering class 
[$renderingClass] specified. Skipping renderers definition.");
-                       return;
-               }
+               
+               $this->existsRendererClass($renderingClass);
                
                $renderingClassInstance = new $renderingClass();
-               if (!$renderingClassInstance instanceof LoggerRendererObject) {
-                       $this->warn("Invalid class [$renderingClass] given. Not 
a valid LoggerRenderer class. Skipping renderers definition.");
-                       return;                 
-               }
+               $this->isRendererClassLoggerRenderer($renderingClassInstance, 
$renderingClass);
        
                if (!isset($config['renderedClass'])) {
                        $this->warn("Rendered class not specified for rendering 
Class [$renderingClass]. Skipping renderers definition.");
@@ -253,11 +261,25 @@ class LoggerConfiguratorDefault implemen
                if (!class_exists($renderedClass)) {
                        $this->warn("Nonexistant rendered class 
[$renderedClass] specified for renderer [$renderingClass]. Skipping renderers 
definition.");
                        return;
-               }               
-
+               }
+               
                $hierarchy->getRendererMap()->addRenderer($renderedClass, 
$renderingClassInstance);
        }
        
+       private function existsRendererClass($renderingClass) {
+               if (!class_exists($renderingClass)) {
+                       $this->warn("Nonexistant rendering class 
[$renderingClass] specified. Skipping renderers definition.");
+                       return;
+               }               
+       }
+       
+       private function isRendererClassLoggerRenderer($renderingClassInstance, 
$renderingClass) {
+               if (!$renderingClassInstance instanceof LoggerRenderer) {
+                       $this->warn("Invalid class [$renderingClass] given. Not 
a valid LoggerRenderer class. Skipping renderers definition.");
+                       return;
+               }
+       }
+       
        /** 
         * Configures an appender based on given config and saves it to 
         * {@link $appenders} array so it can be later linked to loggers. 

Copied: logging/log4php/trunk/src/main/php/renderers/LoggerRenderer.php (from 
r1243083, logging/log4php/trunk/src/main/php/renderers/LoggerRendererObject.php)
URL: 
http://svn.apache.org/viewvc/logging/log4php/trunk/src/main/php/renderers/LoggerRenderer.php?p2=logging/log4php/trunk/src/main/php/renderers/LoggerRenderer.php&p1=logging/log4php/trunk/src/main/php/renderers/LoggerRendererObject.php&r1=1243083&r2=1299253&rev=1299253&view=diff
==============================================================================
--- logging/log4php/trunk/src/main/php/renderers/LoggerRendererObject.php 
(original)
+++ logging/log4php/trunk/src/main/php/renderers/LoggerRenderer.php Sat Mar 10 
18:57:37 2012
@@ -36,7 +36,7 @@
  * @subpackage renderers
  * @since 0.3
  */
-interface LoggerRendererObject {
+interface LoggerRenderer {
        /**
         * Render the entity passed as parameter as a String.
         * @param mixed $o entity to render

Propchange: logging/log4php/trunk/src/main/php/renderers/LoggerRenderer.php
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: logging/log4php/trunk/src/main/php/renderers/LoggerRenderer.php
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Modified: logging/log4php/trunk/src/main/php/renderers/LoggerRendererDefault.php
URL: 
http://svn.apache.org/viewvc/logging/log4php/trunk/src/main/php/renderers/LoggerRendererDefault.php?rev=1299253&r1=1299252&r2=1299253&view=diff
==============================================================================
--- logging/log4php/trunk/src/main/php/renderers/LoggerRendererDefault.php 
(original)
+++ logging/log4php/trunk/src/main/php/renderers/LoggerRendererDefault.php Sat 
Mar 10 18:57:37 2012
@@ -37,7 +37,7 @@
  * @subpackage renderers
  * @since 0.3
  */
-class LoggerRendererDefault implements LoggerRendererObject {
+class LoggerRendererDefault implements LoggerRenderer {
 
        /**
         * Render objects by type casting

Modified: 
logging/log4php/trunk/src/main/php/renderers/LoggerRendererException.php
URL: 
http://svn.apache.org/viewvc/logging/log4php/trunk/src/main/php/renderers/LoggerRendererException.php?rev=1299253&r1=1299252&r2=1299253&view=diff
==============================================================================
--- logging/log4php/trunk/src/main/php/renderers/LoggerRendererException.php 
(original)
+++ logging/log4php/trunk/src/main/php/renderers/LoggerRendererException.php 
Sat Mar 10 18:57:37 2012
@@ -25,7 +25,7 @@
  * @subpackage renderers
  * @since 2.1
  */
-class LoggerRendererException implements LoggerRendererObject {
+class LoggerRendererException implements LoggerRenderer {
 
        public function render($o) {
                $strRep  = 'Throwable('.get_class($o).'): '.$o->getMessage().' 
in '.$o->getFile().' on line '.$o->getLine();

Modified: logging/log4php/trunk/src/main/php/renderers/LoggerRendererMap.php
URL: 
http://svn.apache.org/viewvc/logging/log4php/trunk/src/main/php/renderers/LoggerRendererMap.php?rev=1299253&r1=1299252&r2=1299253&view=diff
==============================================================================
--- logging/log4php/trunk/src/main/php/renderers/LoggerRendererMap.php 
(original)
+++ logging/log4php/trunk/src/main/php/renderers/LoggerRendererMap.php Sat Mar 
10 18:57:37 2012
@@ -45,6 +45,12 @@ class LoggerRendererMap {
         * @var LoggerDefaultRenderer
         */
        private $defaultRenderer;
+       
+       /**
+        * 
+        * @var LoggerRendererObject
+        */
+       private $defaultObjectRenderer;
 
        /**
         * Constructor
@@ -52,6 +58,7 @@ class LoggerRendererMap {
        public function __construct() {
                $this->map = array();
                $this->defaultRenderer = new LoggerRendererDefault();
+               $this->defaultObjectRenderer = new LoggerRendererObject();
        }
 
        /**
@@ -92,9 +99,9 @@ class LoggerRendererMap {
                                $renderer = $this->getByObject($o);
                                if($renderer !== null) {
                                        return $renderer->render($o);
-                               } else {
-                                       return null;
                                }
+
+                               return $this->defaultObjectRenderer->render($o);
                        } else {
                                $renderer = $this->defaultRenderer;
                                return $renderer->render($o);
@@ -124,14 +131,13 @@ class LoggerRendererMap {
         * @return LoggerRendererObject
         */
        public function getByClassName($class) {
-               $r = null;
                for($c = $class; !empty($c); $c = get_parent_class($c)) {
                        $c = strtolower($c);
                        if(isset($this->map[$c])) {
                                return $this->map[$c];
                        }
                }
-               return $this->defaultRenderer;
+               return null;
        }
 
        public function clear() {
@@ -146,4 +152,12 @@ class LoggerRendererMap {
        private function put($class, $or) {
                $this->map[strtolower($class)] = $or;
        }
+       
+       public function setDefaultObjectRenderer($renderer) {
+               $this->defaultObjectRenderer = $renderer;
+       }
+       
+       public function getDefaultObjectRenderer() {
+               return $this->defaultObjectRenderer;
+       }
 }

Added: logging/log4php/trunk/src/main/php/renderers/LoggerRendererObject.php
URL: 
http://svn.apache.org/viewvc/logging/log4php/trunk/src/main/php/renderers/LoggerRendererObject.php?rev=1299253&view=auto
==============================================================================
--- logging/log4php/trunk/src/main/php/renderers/LoggerRendererObject.php 
(added)
+++ logging/log4php/trunk/src/main/php/renderers/LoggerRendererObject.php Sat 
Mar 10 18:57:37 2012
@@ -0,0 +1,22 @@
+<?php
+
+/**
+ * 
+ * @category   tests   
+ * @package    log4php
+ * @subpackage renderers
+ * @license    http://www.apache.org/licenses/LICENSE-2.0 Apache License, 
Version 2.0
+ * @version    SVN: $Id$
+ * @link       http://logging.apache.org/log4php
+ *
+ */
+class LoggerRendererObject implements LoggerRenderer {
+       /* (non-PHPdoc)
+        * @see LoggerRenderer::render()
+        */
+       public function render($o) {
+               return print_r($o, true);
+       }
+}
+
+?>
\ No newline at end of file

Modified: logging/log4php/trunk/src/test/php/LoggerConfiguratorTest.php
URL: 
http://svn.apache.org/viewvc/logging/log4php/trunk/src/test/php/LoggerConfiguratorTest.php?rev=1299253&r1=1299252&r2=1299253&view=diff
==============================================================================
--- logging/log4php/trunk/src/test/php/LoggerConfiguratorTest.php (original)
+++ logging/log4php/trunk/src/test/php/LoggerConfiguratorTest.php Sat Mar 10 
18:57:37 2012
@@ -24,6 +24,12 @@
  * @link       http://logging.apache.org/log4php
  */
 
+
+class CostumDefaultRenderer implements LoggerRenderer {
+       public function render($o) { }
+}
+
+
 /**
  * 
  * @group configurators
@@ -451,4 +457,33 @@
                        ) 
                ));
        }
+       
+       public function 
testConfigureRenderer_ShouldReturnBuildInObjectRenderer() {
+               Logger::configure(array(
+                       'rootLogger' => array(
+                               'appenders' => array('default')
+                       ),
+                       'appenders' => array(
+                               'default' => array(
+                                       'class' => 'LoggerAppenderEcho',
+                                       'threshold' => 'INFO'
+                               ),
+                       ) 
+               ));
+                       
+               $actualDefaultObjectRenderer = 
Logger::getHierarchy()->getRendererMap()->getDefaultObjectRenderer();
+               
+               $this->assertTrue($actualDefaultObjectRenderer instanceof 
LoggerRendererObject, 'build in object renderer');
+       }       
+       
+       public function 
testConfigureRenderer_SetupCostumDefaultObjectRenderer() {
+               Logger::configure(array(
+                       'renderers' => array(
+                                       array('defaultObjectRenderer' => 
'CostumDefaultRenderer')
+                       )));
+               
+               $actualCostumObjectRenderer = 
Logger::getHierarchy()->getRendererMap()->getDefaultObjectRenderer();
+               
+               $this->assertNotNull($actualCostumObjectRenderer, 'costum 
default object renderer');
+       }
  }
\ No newline at end of file

Modified: logging/log4php/trunk/src/test/php/LoggerLoggingEventTest.php
URL: 
http://svn.apache.org/viewvc/logging/log4php/trunk/src/test/php/LoggerLoggingEventTest.php?rev=1299253&r1=1299252&r2=1299253&view=diff
==============================================================================
--- logging/log4php/trunk/src/test/php/LoggerLoggingEventTest.php (original)
+++ logging/log4php/trunk/src/test/php/LoggerLoggingEventTest.php Sat Mar 10 
18:57:37 2012
@@ -115,7 +115,7 @@ class LoggerLoggingEventTest extends PHP
        public function testGetThrowableInformation2() {
                $hierarchy = Logger::getHierarchy();
                $root      = $hierarchy->getRootLogger();
-               
+
                $a = new LoggerLoggingEventTestCaseAppender('A1');
                $a->setLayout( new LoggerLoggingEventTestCaseLayout() );
                $root->addAppender($a);
@@ -124,7 +124,7 @@ class LoggerLoggingEventTest extends PHP
                $logger = $hierarchy->getLogger('test');
                $logger->debug('test', $ex);
                $hierarchy->shutdown();
-               
+
                $ti = self::$throwableInfo;
                
                self::assertTrue($ti instanceof LoggerThrowableInformation);    
                        

Modified: logging/log4php/trunk/src/test/php/renderers/LoggerRendererMapTest.php
URL: 
http://svn.apache.org/viewvc/logging/log4php/trunk/src/test/php/renderers/LoggerRendererMapTest.php?rev=1299253&r1=1299252&r2=1299253&view=diff
==============================================================================
--- logging/log4php/trunk/src/test/php/renderers/LoggerRendererMapTest.php 
(original)
+++ logging/log4php/trunk/src/test/php/renderers/LoggerRendererMapTest.php Sat 
Mar 10 18:57:37 2012
@@ -23,6 +23,12 @@
  * @link       http://logging.apache.org/log4php
  */
 
+class CostumObjectRenderer implements LoggerRenderer {
+       public function render($o) {
+               return true;
+       }
+}
+
 class Fruit3 {
     public $test1 = 'test1';
     public $test2 = 'test2';
@@ -32,12 +38,16 @@ class Fruit3 {
 class Fruit3Descendant extends Fruit3 {
 }
 
-class FruitRenderer3 implements LoggerRendererObject {
+class FruitRenderer3 implements LoggerRenderer {
     public function render($o) {
                return $o->test1.','.$o->test2.','.$o->test3;
        }
 }
 
+class SampleObject {
+       
+}
+
 /**
  * @group renderers
  */
@@ -95,4 +105,18 @@ class LoggerRendererMapTest extends PHPU
         $expected = "WARN - test1,test2,test3" . PHP_EOL;
         self::assertEquals($expected, $actual);
        }
+       
+       public function testGetByObject_CostumRendererShouldRenderObject() {
+               $sampleObject = new SampleObject();
+               
+               Logger::configure(dirname(__FILE__).'/test4.properties');
+               $hierarchy = Logger::getHierarchy();
+               
+               $map = $hierarchy->getRendererMap();
+               $map->setDefaultObjectRenderer(new CostumObjectRenderer());
+               
+               $actual = $map->findAndRender($sampleObject);
+               
+               $this->assertTrue($actual, 'costumobjectrenderer was rendered 
object');
+       }
 }

Added: logging/log4php/trunk/src/test/php/renderers/LoggerRendererObjectTest.php
URL: 
http://svn.apache.org/viewvc/logging/log4php/trunk/src/test/php/renderers/LoggerRendererObjectTest.php?rev=1299253&view=auto
==============================================================================
--- logging/log4php/trunk/src/test/php/renderers/LoggerRendererObjectTest.php 
(added)
+++ logging/log4php/trunk/src/test/php/renderers/LoggerRendererObjectTest.php 
Sat Mar 10 18:57:37 2012
@@ -0,0 +1,43 @@
+<?php
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * 
+ * @category   tests   
+ * @package    log4php
+ * @subpackage renderers
+ * @license    http://www.apache.org/licenses/LICENSE-2.0 Apache License, 
Version 2.0
+ * @version    SVN: $Id$
+ * @link       http://logging.apache.org/log4php
+ */
+
+class DefaultObject {
+       private $a;
+       protected $b;
+       public $c;
+}
+
+/**
+ * @group renderers
+ */
+class LoggerRendererObjectTest extends PHPUnit_Framework_TestCase {
+
+       public function testDoRender() {
+               $class = new DefaultObject();
+               $renderer = new LoggerRendererObject();
+               self::assertEquals(print_r($class, true), 
$renderer->render($class));
+       }
+
+}


Reply via email to