array ( 'level' => 'ERROR', 'appenders' => array ( 'default', ), ), 'appenders' => array ( 'default' => array ( 'class' => 'LoggerAppenderEcho', ), ), 'loggers' => array ( 'mylogger' => array ( 'additivity' => 'false', 'level' => 'DEBUG', 'appenders' => array ( 'default', ), ), ), ); // For testing additivity private $testConfig2 = array ( 'appenders' => array ( 'default' => array ( 'class' => 'LoggerAppenderEcho', ), ), 'rootLogger' => array( 'appenders' => array('default'), ), 'loggers' => array ( 'foo' => array ( 'appenders' => array ( 'default', ), ), 'foo.bar' => array ( 'appenders' => array ( 'default', ), ), 'foo.bar.baz' => array ( 'appenders' => array ( 'default', ), ), ), ); // For testing additivity private $testConfig3 = array ( 'appenders' => array ( 'default' => array ( 'class' => 'LoggerAppenderEcho', ), ), 'rootLogger' => array( 'appenders' => array('default'), ), 'loggers' => array ( 'foo' => array ( 'appenders' => array ( 'default', ), ), 'foo.bar' => array ( 'appenders' => array ( 'default', ), ), 'foo.bar.baz' => array ( 'level' => 'ERROR', 'appenders' => array ( 'default', ), ), ), ); protected function setUp() { Logger::clear(); Logger::resetConfiguration(); } protected function tearDown() { Logger::clear(); Logger::resetConfiguration(); } public function testLoggerExist() { $l = Logger::getLogger('test'); self::assertEquals($l->getName(), 'test'); self::assertTrue(Logger::exists('test')); } public function testCanGetRootLogger() { $l = Logger::getRootLogger(); self::assertEquals($l->getName(), 'root'); } public function testCanGetASpecificLogger() { $l = Logger::getLogger('test'); self::assertEquals($l->getName(), 'test'); } public function testCanLogToAllLevels() { Logger::configure($this->testConfig1); $logger = Logger::getLogger('mylogger'); ob_start(); $logger->info('this is an info'); $logger->warn('this is a warning'); $logger->error('this is an error'); $logger->debug('this is a debug message'); $logger->fatal('this is a fatal message'); $v = ob_get_contents(); ob_end_clean(); $e = 'INFO - this is an info'.PHP_EOL; $e .= 'WARN - this is a warning'.PHP_EOL; $e .= 'ERROR - this is an error'.PHP_EOL; $e .= 'DEBUG - this is a debug message'.PHP_EOL; $e .= 'FATAL - this is a fatal message'.PHP_EOL; self::assertEquals($v, $e); } public function testIsEnabledFor() { Logger::configure($this->testConfig1); $logger = Logger::getLogger('mylogger'); self::assertFalse($logger->isTraceEnabled()); self::assertTrue($logger->isDebugEnabled()); self::assertTrue($logger->isInfoEnabled()); self::assertTrue($logger->isWarnEnabled()); self::assertTrue($logger->isErrorEnabled()); self::assertTrue($logger->isFatalEnabled()); $logger = Logger::getRootLogger(); self::assertFalse($logger->isTraceEnabled()); self::assertFalse($logger->isDebugEnabled()); self::assertFalse($logger->isInfoEnabled()); self::assertFalse($logger->isWarnEnabled()); self::assertTrue($logger->isErrorEnabled()); self::assertTrue($logger->isFatalEnabled()); } public function testGetCurrentLoggers() { Logger::clear(); Logger::resetConfiguration(); self::assertEquals(0, count(Logger::getCurrentLoggers())); Logger::configure($this->testConfig1); self::assertEquals(1, count(Logger::getCurrentLoggers())); $list = Logger::getCurrentLoggers(); self::assertEquals('mylogger', $list[0]->getName()); } public function testAdditivity() { Logger::configure($this->testConfig2); $logger = Logger::getLogger('foo.bar.baz'); ob_start(); $logger->info('test'); $actual = ob_get_contents(); ob_end_clean(); // The message should get logged 4 times: once by every logger in the // hierarchy (including root) $expected = str_repeat('INFO - test' . PHP_EOL, 4); self::assertSame($expected, $actual); } public function testAdditivity2() { Logger::configure($this->testConfig3); $logger = Logger::getLogger('foo.bar.baz'); ob_start(); $logger->info('test'); $actual = ob_get_contents(); ob_end_clean(); // The message should get logged 3 times: once by every logger in the // hierarchy, except foo.bar.baz which is set to level ERROR $expected = str_repeat('INFO - test' . PHP_EOL, 3); self::assertSame($expected, $actual); } }