sup*_*cho 4 php zend-log doctrine-orm zend-framework2
我不知道如何使用Doctrine2配置Zend\Log.仅允许您通过连接适配器直接写入数据库或写入文件.
回答这个问题可能为时已晚,但迟到总比没有好.
我找到了一篇很好的文章,解释了如何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);
}
}
Run Code Online (Sandbox Code Playgroud)
stopQuery()Doctrine在完成将查询发送到数据库服务器时调用的函数被覆盖,以便它可以将当前查询写入Logger对象.
2.配置记录器:在您的config/autoload/global.php文件中添加以下代码,以使Logger可以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;
},
)
),
Run Code Online (Sandbox Code Playgroud)
在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',
),
),
),
),
);
Run Code Online (Sandbox Code Playgroud)
随着上述配置Zend\Log和Doctrine2,你会得到所有记录中查询数据
data/log/sql.log文件.
有关更多详细信息,请参阅此Sql Logger以获取ZF2和Doctrine.
希望这可以帮助某人.
| 归档时间: |
|
| 查看次数: |
1639 次 |
| 最近记录: |