【问题标题】:ZF2 Zend\Log + Doctrine2ZF2 Zend\Log + Doctrine2
【发布时间】:2013-12-28 12:23:02
【问题描述】:

我不知道如何用 Doctrine2 配置 Zend\Log。只允许您通过连接适配器直接写入数据库或写入文件。

【问题讨论】:

    标签: php doctrine-orm zend-framework2 zend-log


    【解决方案1】:

    现在回答这个问题可能为时已晚,但迟到总比没有好。

    我找到了一篇很好的帖子,它解释了如何为 ZF2 和 Doctrine 创建基本的 SQL Logger。

    方法很简单:

    1.创建 Logger 类: 在您的 Module/Application/Log 文件夹中创建以下类:

        <?php
        namespace Application\Log;
    
        use Zend\Log\Logger;  
        use Doctrine\DBAL\Logging\DebugStack;
    
        class SqlLogger extends DebugStack  
        {
            protected $logger;
            
            public function __construct(Logger $logger)
            {
                $this->logger = $logger;
            }
    
            public function stopQuery()
            {
                parent::stopQuery();
                $q = $this->queries[$this->currentQuery];
                $message = "Executed Query:  " . print_r($q, true);
                $this->logger->info($message);
            }
        }
    

    Doctrine 在完成向数据库服务器发送查询时调用的stopQuery() 函数是 覆盖,以便它可以将当前查询写入Logger 对象。

    2。配置记录器: 在您的config/autoload/global.php 文件中添加以下代码,以使 Service Manager 可以使用名称 my_sql_logger 访问 Logger:

            'service_manager' => array(
                'factories' => array(
                    'my_sql_logger' => function($sm) {
                        $log = new \Zend\Log\Logger();
                        $writer = new \Zend\Log\Writer\Stream('./data/logs/sql.log');
                        $log->addWriter($writer);
    
                        $sqllog = new \Application\Log\SqlLogger($log);
                        return $sqllog;
                    },
                )
            ),
            
    

    Logger 会将数据写入data/logs/sql.log 文件。因此,请确保 data/logs 文件夹存在于您的 应用程序根目录。

    3.配置 Doctrine : 现在你需要告诉 Doctrine 使用创建的 Logger。只需添加以下代码 到您的 Doctrine 配置:

        return array(  
            'doctrine' => array(
                 /*--------Add this code------------*/
                'sql_logger_collector' => array(
                    'orm_default' => array(
                        'sql_logger' => 'my_sql_logger',
                    ),
                ),
                /*---------------------------------*/
                'connection' => array(
                    'orm_default' => array(
                        'driverClass' => 'Doctrine\DBAL\Driver\PDOMySql\Driver',
                        'params' => array(
                            'host' => 'localhost',
                            'port' => '3306',
                            'user' => 'username',
                            'password' => 'password',
                            'dbname' => 'dbname',
                        ),
                    ),
                ),
            ),
        );
    

    通过上面Zend\Log和Doctrine2的配置,你会得到所有记录在 data/log/sql.log 文件。

    请查看Sql Logger for ZF2 and Doctrine了解更多详情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-23
      • 2013-09-22
      • 1970-01-01
      • 1970-01-01
      • 2014-05-21
      • 1970-01-01
      • 2016-06-25
      • 1970-01-01
      相关资源
      最近更新 更多