是否有任何示例如何从 application.ini 设置 zend 日志实例?我只找到了一个记录到文件的示例,但我想登录到 SQLITE 数据库表?
问问题
9662 次
4 回答
13
好问题。我找不到Zend_Log_Writer_Db
从引导配置实例化的方法。writer 类需要一个Zend_Db_Adapter
对象。它不接受字符串。
ZF 项目需要进一步开发此用例。他们甚至没有任何单元测试Zend_Application_Resource_Log
,包括 Db 编写器。
在那之前我能建议的最好的方法是您的 Bootstrap 类需要在_initLog()
方法中自定义 Log 资源。
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
protected function _initDb()
{
if ($this->hasPluginResource("db")) {
$r = $this->getPluginResource("db");
$db = $r->getDbAdapter();
Zend_Registry::set("db", $db);
}
}
protected function _initLog()
{
if ($this->hasPluginResource("log")) {
$r = $this->getPluginResource("log");
$log = $r->getLog();
$db = Zend_Registry::get("db");
$writer = new Zend_Log_Writer($db, "log", ...columnMap...);
$log->addWriter($writer);
Zend_Registry::set("log", $log);
}
}
}
于 2010-01-09T20:46:23.463 回答
1
在 手册中:您可以找到一个如何将日志文件写入数据库的示例。这就是您的意思吗?
于 2010-01-05T13:18:47.293 回答
1
这应该可行 - 我将在稍后进行全面测试(现在不在我的开发机器上)
Zend_Application_Resource_Log 可以从 application.ini 设置 Zend_Log 的实例
resources.log.writerName = "db"
resources.log.writerParams.db.adapter = "PDO_SQLITE"
resources.log.writerParams.db.dbname = APPLICATION_PATH "/../db/logdb.sqlite"
resources.log.writerParams.db.table = "log"
于 2010-01-08T12:47:21.743 回答
1
自 ZF 1.10alpha 以来(至少),以下情况一直是正确的。
// e.g. 1 - works
resources.log.firebug.writerName = "Firebug"
// e.g. 2 - fails
resources.log.writerName = "Firebug"
注意:任意数组键“firebug”。当 Zend_Log 工厂处理资源的日志配置时,示例 1 将作为数组传递给 Zend_Log->addWriter()(触发 _constructWriterFromConfig() 方法),而示例 2 将简单地传递一个字符串(触发异常)。
(我知道这是旧的,我使用的是 Firebug 记录器示例,但同样适用于所有日志编写器)
于 2012-02-03T02:08:47.327 回答