Я не знаю, как настроить Zend \ Log с Doctrine2. Позволяет только писать напрямую в базу данных через адаптер подключения или записывать в файл.
ZF2 Zend \ Log + Doctrine2
Ответы (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 подробнее.
Надеюсь, это может кому-то помочь.