Zend_Log в application.ini

Есть ли пример, как настроить экземпляр журнала Zend из application.ini? Я нашел только пример для входа в файл, но я хочу войти в таблицу базы данных SQLITE?

Ресурс Zend Log

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"  
Другие вопросы по тегам