ZF2 Zend \ Log + Doctrine2

时间:2013-12-28 12:23:03

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

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

1 个答案:

答案 0 :(得分:5)

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

我找到了一篇很好的帖子,解释了如何为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

可访问记录器
        '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\LogDoctrine2的上述配置,您将获得记录在其中的所有查询数据 data/log/sql.log档案。

有关详细信息,请参阅此Sql Logger for ZF2 and Doctrine

希望这可以帮助某人。