ZF2 Zend \ Log + Doctrine2

Я не знаю, как настроить Zend \ Log с Doctrine2. Позволяет только писать напрямую в базу данных через адаптер подключения или записывать в файл.


person supernacho    schedule 28.12.2013    source источник


Ответы (1)


Может быть, уже поздно отвечать на этот вопрос, но лучше поздно, чем никогда.

Я нашел хороший пост, в котором объясняется, как создать базовый SQL Logger для ZF2 и Doctrine.

Подход довольно прост:

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);
        }
    }

Функция stopQuery(), которая вызывается Doctrine, когда она завершает отправку запроса на сервер базы данных, переопределяется, чтобы она могла записать текущий запрос в объект 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\Log и Doctrine2 вы получите все данные запроса, зарегистрированные в файле data/log/sql.log.

См. Этот Sql Logger для ZF2 и Doctrine подробнее.

Надеюсь, это может кому-то помочь.

person blackbishop    schedule 12.08.2014