Zend_Log в application.ini
Есть ли пример, как настроить экземпляр журнала Zend из application.ini? Я нашел только пример для входа в файл, но я хочу войти в таблицу базы данных SQLITE?
4 ответа
Хороший вопрос. Я не могу найти способ создать экземпляр Zend_Log_Writer_Db
из конфигурации начальной загрузки. Класс писателя требует Zend_Db_Adapter
объект. Он не принимает строку.
Проект ZF нуждается в дальнейшей разработке этого варианта использования. У них даже нет никаких юнит-тестов для Zend_Application_Resource_Log
которые включают в себя Db писателя.
Лучшее, что я могу предложить до тех пор, это то, что ваш класс Bootstrap должен настроить ресурс Log в _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);
}
}
}
Начиная с ZF 1.10 альфа (по крайней мере), верно следующее.
// 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, но то же самое относится ко всем авторам журналов)
Здесь, в руководстве: вы можете найти пример, как записать ваш файл журнала в базу данных. Это то, что вы имеете в виду?
Это должно сработать - я буду тестировать полностью позже (не на моей машине разработчика сейчас)
Zend_Application_Resource_Log может настроить экземпляр Zend_Log из application.ini
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"