是否有任何示例如何从application.ini设置zend日志的实例?我只找到了一个记录到文件的例子,但是我想登录一个SQLITE数据库表?
答案 0 :(得分:13)
好问题。我找不到从引导程序配置中实例化Zend_Log_Writer_Db
的方法。 writer类需要Zend_Db_Adapter
个对象。它不接受字符串。
ZF项目需要进一步开发此用例。他们甚至没有对包含Db编写者的Zend_Application_Resource_Log
进行任何单元测试。
在此之前,我建议的最好的是你的Bootstrap类需要用_initLog()
方法自定义日志资源。
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);
}
}
}
答案 1 :(得分:1)
在manual中:您可以找到如何将日志文件写入数据库的示例。这就是您的意思吗?
答案 2 :(得分: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"
答案 3 :(得分: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记录器示例,但同样适用于所有日志编写者)