You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by fl...@apache.org on 2012/03/10 19:57:37 UTC

svn commit: r1299253 - in /logging/log4php/trunk/src: main/php/ main/php/configurators/ main/php/renderers/ test/php/ test/php/renderers/

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));
+	}
+
+}