首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为应用程序配置默认的ZendLog工厂?

如何为应用程序配置默认的ZendLog工厂?
EN

Stack Overflow用户
提问于 2017-02-26 23:51:30
回答 1查看 275关注 0票数 1

我有一个ZendFramework应用。运行ZendFramework3.我添加了Zend,并将其注入到IndexController的构造函数 --我在索引控制器的索引操作中记录了一条消息,如下所示。

代码语言:javascript
复制
public function __construct(Logger $logger) 
{
    $this->logger = $logger;
}

public function indexAction()
{
    $this->logger->info('Example Log Message');
    return new ViewModel();
}

我能够用vendor/bin/generate-factory-for-class生成一个工厂。我将其添加到模块配置中,如下所示。

代码语言:javascript
复制
'controllers' => [
    'factories' => [
        Controller\IndexController::class => Controller\IndexControllerFactory::class,
    ],
],

当我运行索引控制器时,会得到以下错误:

代码语言:javascript
复制
/var/www/vendor/zendframework/zend-log/src/Logger.php:434
No log writer specified

我知道我可以用以下内容添加一个作者:

代码语言:javascript
复制
$logger->addWriter($writer);

我的问题是,记录器在哪里被配置?我只是将它添加到模块配置中的['service_manager' => 'factories' => [ . . . ] ]中吗?我应该把我写的工厂化课程放在哪里?和其他部门一起工作?

我正努力用“正确”的方法解决这个问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-28 05:00:58

通常,记录器配置保存在module.config.php中。但毫无疑问,它可以位于其他地方。没有正确的方法,但不知道你在努力实现什么,我建议你遵循传统。

添加到您的module.config.php

代码语言:javascript
复制
'service_manager' => [
    'factories' => [
        'log' => \Zend\Log\LoggerServiceFactory::class,
    ],
],

'log' => [
    'writers' => [
        [
            'name' => 'stream',
            'options' => [
                'stream' => "test.log"
            ]
        ]
    ]
]

您的控制器工厂可能如下所示:

代码语言:javascript
复制
class IndexControllerFactory implements FactoryInterface
{
    public function __invoke (ContainerInterface $container, $requestedName, array $options = null)
    {
        $indexController = new IndexController();
        $indexController->setLogger ($container->get ('log'));

        return $indexController;
    }
}

而控制器本身:

代码语言:javascript
复制
use Zend\Log\LoggerAwareInterface;
use Zend\Log\LoggerAwareTrait;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;

class IndexController extends AbstractActionController implements LoggerAwareInterface
{
    use LoggerAwareTrait;

    public function testAction ()
    {
        $this->logger->info("test");
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42475735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档