LOG4PHP-178:
* Updated Logger::setLevel() to accept null.
* Updated LoggerRoot::setLevel() to deny null.
* Added error reporting to LoggerRoot.
* Updated tests.
git-svn-id: https://svn.apache.org/repos/asf/logging/log4php/trunk@1343190 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/php/Logger.php b/src/main/php/Logger.php
index b2df0dc..efd6982 100644
--- a/src/main/php/Logger.php
+++ b/src/main/php/Logger.php
@@ -379,9 +379,9 @@
* Use LoggerLevel::getLevelXXX() methods to get a LoggerLevel object, e.g.
* <code>$logger->setLevel(LoggerLevel::getLevelInfo());</code>
*
- * @param LoggerLevel $level the level to set
+ * @param LoggerLevel $level The level to set, or NULL to clear the logger level.
*/
- public function setLevel(LoggerLevel $level) {
+ public function setLevel(LoggerLevel $level = null) {
$this->level = $level;
}
@@ -393,9 +393,8 @@
*/
public function isAttached(LoggerAppender $appender) {
return isset($this->appenders[$appender->getName()]);
- }
-
-
+ }
+
/**
* Sets the parent logger.
* @param Logger $logger
diff --git a/src/main/php/LoggerRoot.php b/src/main/php/LoggerRoot.php
index 102c5c4..315837d 100644
--- a/src/main/php/LoggerRoot.php
+++ b/src/main/php/LoggerRoot.php
@@ -31,7 +31,7 @@
*
* @param integer $level initial log level
*/
- public function __construct($level = null) {
+ public function __construct(LoggerLevel $level = null) {
parent::__construct('root');
if($level == null) {
@@ -43,28 +43,29 @@
/**
* @return LoggerLevel the level
*/
- public function getChainedLevel() {
- return parent::getLevel();
- }
+ public function getEffectiveLevel() {
+ return $this->getLevel();
+ }
/**
- * Setting a null value to the level of the root category may have catastrophic results.
+ * Override level setter to prevent setting the root logger's level to
+ * null. Root logger must always have a level.
+ *
* @param LoggerLevel $level
*/
- public function setLevel($level) {
- if($level != null) {
+ public function setLevel(LoggerLevel $level = null) {
+ if (isset($level)) {
parent::setLevel($level);
- }
+ } else {
+ trigger_error("log4php: Cannot set LoggerRoot level to null.", E_USER_WARNING);
+ }
}
/**
- * Always returns false.
- * Because LoggerRoot has no parents, it returns false.
+ * Override parent setter. Root logger cannot have a parent.
* @param Logger $parent
- * @return boolean
*/
public function setParent(Logger $parent) {
- return false;
+ trigger_error("log4php: LoggerRoot cannot have a parent.", E_USER_WARNING);
}
-
}
diff --git a/src/test/php/LoggerHierarchyTest.php b/src/test/php/LoggerHierarchyTest.php
index c61bbc7..68f4f86 100644
--- a/src/test/php/LoggerHierarchyTest.php
+++ b/src/test/php/LoggerHierarchyTest.php
@@ -33,38 +33,23 @@
$this->hierarchy = new LoggerHierarchy(new LoggerRoot());
}
- public function testIfLevelIsInitiallyLevelAllg() {
- self::assertEquals('ALL', $this->hierarchy->getRootLogger()->getLevel()->toString());
- }
-
- public function testIfNameIsRoot() {
- self::assertEquals('root', $this->hierarchy->getRootLogger()->getName());
- }
-
- public function testIfParentIsNull() {
- self::assertSame(null, $this->hierarchy->getRootLogger()->getParent());
- }
-
- public function testSetParent() {
- $l = $this->hierarchy->getLogger('dummy');
- $this->hierarchy->getRootLogger()->setParent($l);
- $this->testIfParentIsNull();
- }
-
public function testResetConfiguration() {
$root = $this->hierarchy->getRootLogger();
$appender = new LoggerAppenderConsole('A1');
$root->addAppender($appender);
+
$logger = $this->hierarchy->getLogger('test');
- self::assertEquals(count($this->hierarchy->getCurrentLoggers()), 1);
+ self::assertEquals(1, count($this->hierarchy->getCurrentLoggers()));
+
$this->hierarchy->resetConfiguration();
- self::assertEquals($this->hierarchy->getRootLogger()->getLevel()->toString(), 'DEBUG');
- self::assertEquals($this->hierarchy->getThreshold()->toString(), 'ALL');
- self::assertEquals(count($this->hierarchy->getCurrentLoggers()), 1);
- foreach($this->hierarchy->getCurrentLoggers() as $l) {
- self::assertEquals($l->getLevel(), null);
- self::assertTrue($l->getAdditivity());
- self::assertEquals(count($l->getAllAppenders()), 0);
+ self::assertEquals(LoggerLevel::getLevelDebug(), $root->getLevel());
+ self::assertEquals(LoggerLevel::getLevelAll(), $this->hierarchy->getThreshold());
+ self::assertEquals(1, count($this->hierarchy->getCurrentLoggers()));
+
+ foreach($this->hierarchy->getCurrentLoggers() as $logger) {
+ self::assertNull($logger->getLevel());
+ self::assertTrue($logger->getAdditivity());
+ self::assertEquals(0, count($logger->getAllAppenders()), 0);
}
}
diff --git a/src/test/php/LoggerRootTest.php b/src/test/php/LoggerRootTest.php
index 46c4304..cf76fe4 100644
--- a/src/test/php/LoggerRootTest.php
+++ b/src/test/php/LoggerRootTest.php
@@ -26,30 +26,38 @@
* @group main
*/
class LoggerRootTest extends PHPUnit_Framework_TestCase {
-
- private $loggerRoot;
-
- protected function setUp() {
- $this->loggerRoot = new LoggerRoot();
- }
-
- public function testIfLevelIsInitiallyLevelAll() {
- self::assertEquals($this->loggerRoot->getLevel()->toString(), 'ALL');
+
+ public function testInitialSetup() {
+ $root = new LoggerRoot();
+ self::assertSame(LoggerLevel::getLevelAll(), $root->getLevel());
+ self::assertSame(LoggerLevel::getLevelAll(), $root->getEffectiveLevel());
+ self::assertSame('root', $root->getName());
+ self::assertNull($root->getParent());
}
- public function testIfNameIsRoot() {
- self::assertEquals($this->loggerRoot->getName(), 'root');
+ /**
+ * @expectedException PHPUnit_Framework_Error
+ * @expectedExceptionMessage log4php: LoggerRoot cannot have a parent.
+ */
+ public function testSetParentWarning() {
+ $root = new LoggerRoot();
+ $logger = new Logger('test');
+ $root->setParent($logger);
}
-
- public function testIfParentIsNull() {
- self::assertSame($this->loggerRoot->getParent(), null);
+
+ public function testSetParentResult() {
+ $root = new LoggerRoot();
+ $logger = new Logger('test');
+ @$root->setParent($logger);
+ self::assertNull($root->getParent());
}
-
- public function testSetParent() {
- $hierarchy = new LoggerHierarchy(new LoggerRoot());
- $l = $hierarchy->getLogger('dummy');
- $this->loggerRoot->setParent($l);
- $this->testIfParentIsNull();
+
+ /**
+ * @expectedException PHPUnit_Framework_Error
+ * @expectedExceptionMessage log4php: Cannot set LoggerRoot level to null.
+ */
+ public function testNullLevelWarning() {
+ $root = new LoggerRoot();
+ $root->setLevel(null);
}
-
}