ZF2 ZendLog + Doctrine2



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

也许现在回答这个问题已经太晚了,但迟总比不回答好。

我找到了一篇很好的文章,解释了如何为ZF2和条令创建一个基本的SQL Logger

方法非常简单:

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

<?php
namespace ApplicationLog;
use ZendLogLogger;  
use DoctrineDBALLoggingDebugStack;
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.配置Logger:config/autoload/global.php文件中添加以下代码,使Service Manager使用名称my_sql_logger:可访问的记录器

'service_manager' => array(
'factories' => array(
'my_sql_logger' => function($sm) {
$log = new ZendLogLogger();
$writer = new ZendLogWriterStream('./data/logs/sql.log');
$log->addWriter($writer);
$sqllog = new ApplicationLogSqlLogger($log);
return $sqllog;
},
)
),

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

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

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' => 'DoctrineDBALDriverPDOMySqlDriver',
'params' => array(
'host' => 'localhost',
'port' => '3306',
'user' => 'username',
'password' => 'password',
'dbname' => 'dbname',
),
),
),
),
);

使用ZendLogDoctrine2的上述配置,您将获得记录在data/log/sql.log文件。

有关更多详细信息,请参阅ZF2和Doctrine的Sql Logger。

最新更新