Zend framework2 是否有方法将日志编写器工厂添加到记录器配置中?
我编写logger config并使用Zend\Log\LoggerServiceFactory配置logger。如果我使用基本作者,所有的工作。但我想把我自己的作者加入一个由工厂创建的记录器,这是donn't work 是否有一种方法可以使用config和base logger factory从自己的工厂添加writer 更新:这是我的代码 这是我的配置,我为记录器定义工厂,为编写器定义工厂,为基本编写器定义配置Zend framework2 是否有方法将日志编写器工厂添加到记录器配置中?,zend-framework2,Zend Framework2,我编写logger config并使用Zend\Log\LoggerServiceFactory配置logger。如果我使用基本作者,所有的工作。但我想把我自己的作者加入一个由工厂创建的记录器,这是donn't work 是否有一种方法可以使用config和base logger factory从自己的工厂添加writer 更新:这是我的代码 这是我的配置,我为记录器定义工厂,为编写器定义工厂,为基本编写器定义配置 // config/autoload/global.php return ar
// config/autoload/global.php
return array(
'service_manager' => array(
'factories' => array(
'Logger' => 'Zend\Log\LoggerServiceFactory',
'Rollbar' => 'Yassa\Rollbar\Log\Writer\Rollbar'
),
),
'log' => array(
'writers' => array(
array(
'name' => 'stream',
'options' => array(
...
),
),
array(
'name' => 'stream',
'options' => array(
...
),
),
array(
'name' => 'Rollbar',
),
),
),
);
Yassa\Rollbar\Log\Writer\Rollbar-它是Yassa\Rollbar模块的工厂
如果没有Rollbar writer,此配置将执行我需要的操作—创建和配置standart writer
因此,我从aontroller调用记录器:
$this->getServiceLocator()->get('Logger')->info('test');
我研究了组件代码,没有找到使用工厂创建自己的编写器的方法。不幸的是,目前这是不可能的。我想我找到了解决办法。这个解决方案不是很好,但没有比这更好的了,我想出来了 我编写了一个标准factory\Zend\Log\LoggerServiceFactory的替换,并从我的工厂中的记录器构造函数传输记录器配置。此外,我还为writer工厂添加了一张支票 下面是生成的类:
<?php
namespace Application\Factory;
use Zend\Log\Exception\InvalidArgumentException;
use Zend\Log\Logger;
use Zend\ServiceManager\FactoryInterface;
use Zend\ServiceManager\ServiceLocatorInterface;
class LoggerServiceFactory implements FactoryInterface
{
public function createService(ServiceLocatorInterface $serviceLocator)
{
// Configure the logger
$config = $serviceLocator->get('Config');
$options = isset($config['log']) ? $config['log'] : array();
$logger = new Logger();
if (is_array($options)) {
if (isset($options['writers']) && is_array($options['writers'])) {
foreach ($options['writers'] as $writer) {
if (!isset($writer['name'])) {
throw new InvalidArgumentException('Options must contain a name for the writer');
}
$priority = (isset($writer['priority'])) ? $writer['priority'] : null;
$writerOptions = (isset($writer['options'])) ? $writer['options'] : null;
if ($serviceLocator->has($writer['name'])) {
$writer = $serviceLocator->get($writer['name']);
$logger->addWriter($writer, $priority, $writerOptions);
} else {
$logger->addWriter($writer['name'], $priority, $writerOptions);
}
}
}
if (isset($options['exceptionhandler']) && $options['exceptionhandler'] === true) {
Logger::registerExceptionHandler($logger);
}
if (isset($options['errorhandler']) && $options['errorhandler'] === true) {
Logger::registerErrorHandler($logger);
}
}
return $logger;
}
}
有人能提出更好的解决方案吗?也许你可以给我们看一些代码来帮助你,我为延误道歉。添加代码示例