Skip to content

Commit

Permalink
Merge pull request enlitepro#5 from FlexShopper/master
Browse files Browse the repository at this point in the history
Enable chained handlers in ZF2 configuration
  • Loading branch information
Sysaninster committed Feb 24, 2015
2 parents fefdef0 + e8093ac commit dcc1a10
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 9 deletions.
16 changes: 13 additions & 3 deletions src/EnliteMonolog/Service/MonologServiceFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ public function createLogger(ServiceLocatorInterface $serviceLocator, MonologOpt
$logger = new Logger($options->getName());

foreach ($options->getHandlers() as $handler) {
$logger->pushHandler($this->createHandler($serviceLocator, $handler));
$logger->pushHandler($this->createHandler($serviceLocator, $options, $handler));
}

foreach ($options->getProcessors() as $processor) {
Expand All @@ -50,12 +50,13 @@ public function createLogger(ServiceLocatorInterface $serviceLocator, MonologOpt

/**
* @param ServiceLocatorInterface $serviceLocator
* @param MonologOptions $options
* @param string|array $handler
* @throws \RuntimeException
* @return LoggerInterface
*
* @throws RuntimeException
*/
public function createHandler(ServiceLocatorInterface $serviceLocator, $handler)
public function createHandler(ServiceLocatorInterface $serviceLocator, MonologOptions $options, $handler)
{
if (is_string($handler) && $serviceLocator->has($handler)) {
return $serviceLocator->get($handler);
Expand All @@ -75,6 +76,15 @@ public function createHandler(ServiceLocatorInterface $serviceLocator, $handler)

$reflection = new ClassReflection($handler['name']);

if (isset($handler['args']['handler'])) {
foreach ($options->getHandlers() as $key => $option) {
if ($handler['args']['handler'] == $key) {
$handler['args']['handler'] = $this->createHandler($serviceLocator, $options, $option);
break;
}
}
}

$instance = call_user_func_array(array($reflection, 'newInstance'), $handler['args']);
} else {
$class = $handler['name'];
Expand Down
25 changes: 19 additions & 6 deletions test/EnliteMonologTest/Service/MonologServiceFactoryTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -31,33 +31,40 @@ public function testCreateService()

public function testCreateHandlerFromServiceLocator()
{
$config = array('name' => 'test', 'handlers' => array(array('name' => 'Monolog\Handler\TestHandler')));

$serviceManager = new ServiceManager();
$serviceManager->setService('TestHandler', 'works');

$factory = new MonologServiceFactory();

$this->assertEquals('works', $factory->createHandler($serviceManager, 'TestHandler'));

$this->assertEquals('works', $factory->createHandler($serviceManager, new MonologOptions($config), 'TestHandler'));
}

public function testCreateHandlerByClassNameWithoutArgs()
{
$config = array('name' => 'test', 'handlers' => array(array('name' => 'Monolog\Handler\TestHandler')));

$serviceManager = new ServiceManager();
$handler = array('name' => 'Monolog\Handler\TestHandler');

$factory = new MonologServiceFactory();

$this->assertInstanceOf('Monolog\Handler\TestHandler', $factory->createHandler($serviceManager, $handler));
$this->assertInstanceOf('Monolog\Handler\TestHandler', $factory->createHandler($serviceManager, new MonologOptions($config), $handler));
}

public function testCreateHandlerByClassNameWithArgs()
{
$config = array('name' => 'test', 'handlers' => array(array('name' => 'Monolog\Handler\TestHandler')));

$serviceManager = new ServiceManager();

$handler = array('name' => 'EnliteMonologTest\Service\HandlerMock', 'args' => array('some.log'));

$factory = new MonologServiceFactory();

$logger = $factory->createHandler($serviceManager, $handler);
$logger = $factory->createHandler($serviceManager, new MonologOptions($config), $handler);
$this->assertInstanceOf('EnliteMonologTest\Service\HandlerMock', $logger);
$this->assertEquals('some.log', $logger->getPath());
}
Expand All @@ -67,32 +74,38 @@ public function testCreateHandlerByClassNameWithArgs()
*/
public function testCreateHandlerByEmptyClassname()
{
$config = array('name' => 'test', 'handlers' => array(array('name' => 'Monolog\Handler\TestHandler')));

$serviceManager = new ServiceManager();
$factory = new MonologServiceFactory();

$factory->createHandler($serviceManager, array());
$factory->createHandler($serviceManager, new MonologOptions($config), array());
}

/**
* @expectedException \RuntimeException
*/
public function testCreateHandlerNotExistsClassname()
{
$config = array('name' => 'test', 'handlers' => array(array('name' => 'Monolog\Handler\TestHandler')));

$serviceManager = new ServiceManager();
$factory = new MonologServiceFactory();

$factory->createHandler($serviceManager, array('name' => 'unknown_class_name'));
$factory->createHandler($serviceManager, new MonologOptions($config), array('name' => 'unknown_class_name'));
}

/**
* @expectedException \RuntimeException
*/
public function testCreateHandlerWithBadArgs()
{
$config = array('name' => 'test', 'handlers' => array(array('name' => 'Monolog\Handler\TestHandler')));

$serviceManager = new ServiceManager();
$factory = new MonologServiceFactory();

$factory->createHandler($serviceManager, array('name' => 'Monolog\Handler\TestHandler', 'args' => ''));
$factory->createHandler($serviceManager, new MonologOptions($config), array('name' => 'Monolog\Handler\TestHandler', 'args' => ''));
}

}

0 comments on commit dcc1a10

Please sign in to comment.