Index: src/main/php/LoggerConfigurator.php
===================================================================
--- src/main/php/LoggerConfigurator.php (revision 1203327)
+++ src/main/php/LoggerConfigurator.php (working copy)
@@ -218,12 +218,44 @@
// Configure renderers
if (isset($config['renderers']) && is_array($config['renderers'])) {
- foreach($config['renderers'] as $renderer) {
- $hierarchy->getRendererMap()->addRenderer($renderer['renderedClass'], $renderer['renderingClass']);
+ foreach($config['renderers'] as $rendererConfig) {
+ $this->configureRenderer($hierarchy, $rendererConfig);
}
}
}
+ private function configureRenderer(LoggerHierarchy $hierarchy, $config) {
+ 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;
+ }
+
+ $renderingClassInstance = new $renderingClass();
+ if (!$renderingClassInstance instanceof LoggerRendererObject) {
+ $this->warn("Invalid class [$renderingClass] given. Not a valid LoggerRenderer class. Skipping renderers definition.");
+ return;
+ }
+
+ if (!isset($config['renderedClass'])) {
+ $this->warn("Rendered class not specified for rendering Class [$renderingClass]. Skipping renderers definition.");
+ return;
+ }
+
+ $renderedClass = $config['renderedClass'];
+ if (!class_exists($renderedClass)) {
+ $this->warn("Nonexistant rendered class [$renderedClass] specified for renderer [$renderingClass]. Skipping renderers definition.");
+ return;
+ }
+
+ $hierarchy->getRendererMap()->addRenderer($renderedClass, $renderingClassInstance);
+ }
+
/**
* Configures an appender based on given config and saves it to
* {@link $appenders} array so it can be later linked to loggers.
@@ -256,7 +288,7 @@
$this->warn("Invalid class [$class] given for appender [$name]. Not a valid LoggerAppender class. Skipping appender definition.");
return;
}
-
+
// Parse the appender threshold
if (isset($config['threshold'])) {
$threshold = LoggerLevel::toLevel($config['threshold']);
Index: src/test/php/LoggerAppenderPoolTest.php
===================================================================
--- src/test/php/LoggerAppenderPoolTest.php (revision 0)
+++ src/test/php/LoggerAppenderPoolTest.php (revision 0)
@@ -0,0 +1,65 @@
+appenderMock = $this->getMock('LoggerAppenderConsole', array(), array(), '', false);
+ }
+
+ /**
+ * @expectedException PHPUnit_Framework_Error
+ * @expectedExceptionMessage log4php: Cannot add unnamed appender to pool.
+ */
+ public function testAppenderHasNoName() {
+ $this->appenderMock->expects($this->once())
+ ->method('getName')
+ ->will($this->returnValue(''));
+
+ LoggerAppenderPool::add($this->appenderMock);
+ }
+
+ /**
+ * @expectedException PHPUnit_Framework_Error
+ * @expectedExceptionMessage log4php: Appender [foo] already exists in pool. Overwriting existing appender.
+ */
+ public function testAppenderIsAdded() {
+ $this->appenderMock->expects($this->any())
+ ->method('getName')
+ ->will($this->returnValue('foo'));
+
+ LoggerAppenderPool::add($this->appenderMock);
+ LoggerAppenderPool::add($this->appenderMock);
+
+ $expected = 1;
+ $actual = count(LoggerAppenderPool::getAppenders());
+ $this->assertEquals($expected, $actual);
+ }
+}
Index: src/test/php/LoggerConfiguratorTest.php
===================================================================
--- src/test/php/LoggerConfiguratorTest.php (revision 1203327)
+++ src/test/php/LoggerConfiguratorTest.php (working copy)
@@ -47,6 +47,172 @@
}
/**
+ * @expectedException PHPUnit_Framework_Error
+ * @expectedExceptionMessage Invalid configuration param given. Reverting to default configuration.
+ */
+ public function testInputIsInteger() {
+ Logger::configure(12345);
+ }
+
+ /**
+ * @expectedException PHPUnit_Framework_Error
+ * @expectedExceptionMessage log4php: Configuration failed. Unsupported configuration file extension: yml
+ */
+ public function testYAMLFile() {
+ Logger::configure(__DIR__ .'/../ressources/configs/config.yml');
+ }
+
+ /**
+ * @expectedException PHPUnit_Framework_Error
+ * @expectedExceptionMessage Invalid configuration provided for appender
+ */
+ public function testAppenderConfigNotArray() {
+ $hierachyMock = $this->getMock('LoggerHierarchy', array(), array(), '', false);
+
+ $config = array(
+ 'appenders' => array(
+ 'default',
+ ),
+ );
+
+ $configurator = new LoggerConfigurator();
+ $configurator->configure($hierachyMock, $config);
+ }
+
+ /**
+ * @expectedException PHPUnit_Framework_Error
+ * @expectedExceptionMessage No class given for appender
+ */
+ public function testNoAppenderClassSet() {
+ Logger::configure(__DIR__ .'/../ressources/configs/appenders/config_no_class.xml');
+ }
+
+ /**
+ * @expectedException PHPUnit_Framework_Error
+ * @expectedExceptionMessage Invalid class [unknownClass] given for appender [foo]. Class does not exist. Skipping appender definition.
+ */
+ public function testNotExistingAppenderClassSet() {
+ Logger::configure(__DIR__ .'/../ressources/configs/appenders/config_not_existing_class.xml');
+ }
+
+ /**
+ * @expectedException PHPUnit_Framework_Error
+ * @expectedExceptionMessage Invalid class [stdClass] given for appender [foo]. Not a valid LoggerAppender class. Skipping appender definition.
+ */
+ public function testInvalidAppenderClassSet() {
+ Logger::configure(__DIR__ .'/../ressources/configs/appenders/config_invalid_appender_class.xml');
+ }
+
+ /**
+ * @expectedException PHPUnit_Framework_Error
+ * @expectedExceptionMessage Nonexistant filter class [Foo] specified on appender [foo]. Skipping filter definition.
+ */
+ public function testNotExistingAppenderFilterClassSet() {
+ Logger::configure(__DIR__ .'/../ressources/configs/appenders/config_not_existing_filter_class.xml');
+ }
+
+ /**
+ * @expectedException PHPUnit_Framework_Error
+ * @expectedExceptionMessage Nonexistant option [fooParameter] specified on [LoggerFilterStringMatch]. Skipping.
+ */
+ public function testInvalidAppenderFilterParamter() {
+ Logger::configure(__DIR__ .'/../ressources/configs/appenders/config_invalid_filter_parameters.xml');
+ }
+
+ /**
+ * @expectedException PHPUnit_Framework_Error
+ * @expectedExceptionMessage Invalid filter class [stdClass] sepcified on appender [foo]. Skipping filter definition.
+ */
+ public function testInvalidAppenderFilterClassSet() {
+ Logger::configure(__DIR__ .'/../ressources/configs/appenders/config_invalid_filter_class.xml');
+ }
+
+ /**
+ * @expectedException PHPUnit_Framework_Error
+ * @expectedExceptionMessage Nonexistant layout class [Foo] specified for appender [foo]. Reverting to default layout.
+ */
+ public function testNotExistingAppenderLayoutClassSet() {
+ Logger::configure(__DIR__ .'/../ressources/configs/appenders/config_not_existing_layout_class.xml');
+ }
+
+ /**
+ * @expectedException PHPUnit_Framework_Error
+ * @expectedExceptionMessage Invalid layout class [stdClass] sepcified for appender [foo]. Reverting to default layout.
+ */
+ public function testInvalidAppenderLayoutClassSet() {
+ Logger::configure(__DIR__ .'/../ressources/configs/appenders/config_invalid_layout_class.xml');
+ }
+
+ /**
+ * @expectedException PHPUnit_Framework_Error
+ * @expectedExceptionMessage Layout class not specified for appender [foo]. Reverting to default layout.
+ */
+ public function testNoAppenderLayoutClassSet() {
+ Logger::configure(__DIR__ .'/../ressources/configs/appenders/config_no_layout_class.xml');
+ }
+
+ /**
+ * @expectedException PHPUnit_Framework_Error
+ * @expectedExceptionMessage Invalid class [stdClass] given. Not a valid LoggerRenderer class. Skipping renderers definition.
+ */
+ public function testInvalidRenderingClassSet() {
+ Logger::configure(__DIR__ .'/../ressources/configs/renderers/config_invalid_rendering_class.xml');
+ }
+
+ /**
+ * @expectedException PHPUnit_Framework_Error
+ * @expectedExceptionMessage Rendering class not specified. Skipping renderers definition.
+ */
+ public function testNoRenderingClassSet() {
+ Logger::configure(__DIR__ .'/../ressources/configs/renderers/config_no_rendering_class.xml');
+ }
+
+ /**
+ * @expectedException PHPUnit_Framework_Error
+ * @expectedExceptionMessage Rendered class not specified for rendering Class [LoggerRendererDefault]. Skipping renderers definition.
+ */
+ public function testNoRenderedClassSet() {
+ Logger::configure(__DIR__ .'/../ressources/configs/renderers/config_no_rendered_class.xml');
+ }
+
+ /**
+ * @expectedException PHPUnit_Framework_Error
+ * @expectedExceptionMessage Nonexistant rendered class [RenderFooClass] specified for renderer [LoggerRendererDefault]. Skipping renderers definition.
+ */
+ public function testNotExistingRenderedClassSet() {
+ Logger::configure(__DIR__ .'/../ressources/configs/renderers/config_not_existing_rendered_class.xml');
+ }
+
+ /**
+ * @expectedException PHPUnit_Framework_Error
+ * @expectedExceptionMessage Nonexistant rendering class [FooRenderer] specified. Skipping renderers definition.
+ */
+ public function testNotExistingRenderingClassSet() {
+ Logger::configure(__DIR__ .'/../ressources/configs/renderers/config_not_existing_rendering_class.xml');
+ }
+
+//----------------------
+
+
+ /**
+ * @expectedException PHPUnit_Framework_Error
+ * @expectedExceptionMessage Invalid additivity value [4711] specified for logger [myLogger].
+ */
+ public function testInvalidLoggerAddivity() {
+ Logger::configure(__DIR__ .'/../ressources/configs/loggers/config_invalid_additivity.xml');
+ }
+
+ /**
+ * @expectedException PHPUnit_Framework_Error
+ * @expectedExceptionMessage Nonexistnant appender [unknownAppender] linked to logger [myLogger].
+ */
+ public function testNotExistingLoggerAppendersClass() {
+ Logger::configure(__DIR__ .'/../ressources/configs/loggers/config_not_existing_appenders.xml');
+ }
+
+
+//----------------------
+ /**
* Test that an error is reported when config file is not found.
* @expectedException PHPUnit_Framework_Error
* @expectedExceptionMessage log4php: Configuration failed. File not found
@@ -63,15 +229,27 @@
}
public function testAppendersWithLayout() {
- Logger::configure(array(
+ $config = Logger::configure(array(
'rootLogger' => array(
'appenders' => array('app1', 'app2')
),
+ 'loggers' => array(
+ 'myLogger' => array(
+ 'appenders' => array('app1'),
+ 'additivity'=> true
+ )
+ ),
+ 'renderers' => array(
+ array('renderedClass' => 'stdClass', 'renderingClass' => 'LoggerRendererDefault')
+ ),
'appenders' => array(
'app1' => array(
'class' => 'LoggerAppenderEcho',
'layout' => array(
'class' => 'LoggerLayoutSimple'
+ ),
+ 'params' => array(
+ 'htmlLineBreaks' => false
)
),
'app2' => array(
@@ -81,6 +259,15 @@
'params' => array(
'conversionPattern' => 'message: %m%n'
)
+ ),
+ 'filters' => array(
+ array(
+ 'class' => 'LoggerFilterStringMatch',
+ 'params'=> array(
+ 'stringToMatch' => 'foo',
+ 'acceptOnMatch' => false
+ )
+ )
)
),
)
Index: src/test/ressources/configs/appenders/config_no_layout_class.xml
===================================================================
--- src/test/ressources/configs/appenders/config_no_layout_class.xml (revision 0)
+++ src/test/ressources/configs/appenders/config_no_layout_class.xml (revision 0)
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
Index: src/test/ressources/configs/appenders/config_no_class.xml
===================================================================
--- src/test/ressources/configs/appenders/config_no_class.xml (revision 0)
+++ src/test/ressources/configs/appenders/config_no_class.xml (revision 0)
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
Index: src/test/ressources/configs/appenders/config_invalid_appender_class.xml
===================================================================
--- src/test/ressources/configs/appenders/config_invalid_appender_class.xml (revision 0)
+++ src/test/ressources/configs/appenders/config_invalid_appender_class.xml (revision 0)
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
Index: src/test/ressources/configs/appenders/config_invalid_layout_class.xml
===================================================================
--- src/test/ressources/configs/appenders/config_invalid_layout_class.xml (revision 0)
+++ src/test/ressources/configs/appenders/config_invalid_layout_class.xml (revision 0)
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
Index: src/test/ressources/configs/appenders/config_invalid_filter_class.xml
===================================================================
--- src/test/ressources/configs/appenders/config_invalid_filter_class.xml (revision 0)
+++ src/test/ressources/configs/appenders/config_invalid_filter_class.xml (revision 0)
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
Index: src/test/ressources/configs/appenders/config_invalid_filter_parameters.xml
===================================================================
--- src/test/ressources/configs/appenders/config_invalid_filter_parameters.xml (revision 0)
+++ src/test/ressources/configs/appenders/config_invalid_filter_parameters.xml (revision 0)
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: src/test/ressources/configs/appenders/config_not_existing_filter_class.xml
===================================================================
--- src/test/ressources/configs/appenders/config_not_existing_filter_class.xml (revision 0)
+++ src/test/ressources/configs/appenders/config_not_existing_filter_class.xml (revision 0)
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
Index: src/test/ressources/configs/appenders/config_not_existing_class.xml
===================================================================
--- src/test/ressources/configs/appenders/config_not_existing_class.xml (revision 0)
+++ src/test/ressources/configs/appenders/config_not_existing_class.xml (revision 0)
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
Index: src/test/ressources/configs/appenders/config_not_existing_layout_class.xml
===================================================================
--- src/test/ressources/configs/appenders/config_not_existing_layout_class.xml (revision 0)
+++ src/test/ressources/configs/appenders/config_not_existing_layout_class.xml (revision 0)
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
Index: src/test/ressources/configs/loggers/config_invalid_additivity.xml
===================================================================
--- src/test/ressources/configs/loggers/config_invalid_additivity.xml (revision 0)
+++ src/test/ressources/configs/loggers/config_invalid_additivity.xml (revision 0)
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: src/test/ressources/configs/loggers/config_not_existing_appenders.xml
===================================================================
--- src/test/ressources/configs/loggers/config_not_existing_appenders.xml (revision 0)
+++ src/test/ressources/configs/loggers/config_not_existing_appenders.xml (revision 0)
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
Index: src/test/ressources/configs/config.yml
===================================================================
Index: src/test/ressources/configs/config1.xml
===================================================================
--- src/test/ressources/configs/config1.xml (revision 0)
+++ src/test/ressources/configs/config1.xml (revision 0)
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: src/test/ressources/configs/renderers/config_invalid_rendering_class.xml
===================================================================
--- src/test/ressources/configs/renderers/config_invalid_rendering_class.xml (revision 0)
+++ src/test/ressources/configs/renderers/config_invalid_rendering_class.xml (revision 0)
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: src/test/ressources/configs/renderers/config_no_rendered_class.xml
===================================================================
--- src/test/ressources/configs/renderers/config_no_rendered_class.xml (revision 0)
+++ src/test/ressources/configs/renderers/config_no_rendered_class.xml (revision 0)
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: src/test/ressources/configs/renderers/config_not_existing_rendered_class.xml
===================================================================
--- src/test/ressources/configs/renderers/config_not_existing_rendered_class.xml (revision 0)
+++ src/test/ressources/configs/renderers/config_not_existing_rendered_class.xml (revision 0)
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: src/test/ressources/configs/renderers/config_not_existing_rendering_class.xml
===================================================================
--- src/test/ressources/configs/renderers/config_not_existing_rendering_class.xml (revision 0)
+++ src/test/ressources/configs/renderers/config_not_existing_rendering_class.xml (revision 0)
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: src/test/ressources/configs/renderers/config_no_rendering_class.xml
===================================================================
--- src/test/ressources/configs/renderers/config_no_rendering_class.xml (revision 0)
+++ src/test/ressources/configs/renderers/config_no_rendering_class.xml (revision 0)
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+