【问题标题】:Zend_Log in application.iniZend_Log in application.ini
【发布时间】:2010-12-30 09:48:18
【问题描述】:

是否有任何示例如何从 application.ini 设置 zend 日志实例?我只找到了一个记录到文件的示例,但我想登录到 SQLITE 数据库表?

Zend Log resource

【问题讨论】:

  • 我正在谈论 ZF 1.10alpha 版本..

标签: php zend-framework logging zend-application


【解决方案1】:

好问题。我找不到从引导配置中实例化 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);
    }
  }

}

【讨论】:

  • 谢谢比尔!一项更改:$log->addWriter($writer);
【解决方案2】:

manual:你可以找到一个如何将你的日志文件写入数据库的例子。这是你的意思吗?

【讨论】:

  • 嗨,不。我想将日志资源添加到我的 application.ini。像 DB Adapter 和其他东西。 ZF 1.10 中是否有这个新资源可用。
【解决方案3】:

这应该可行 - 我稍后会进行全面测试(现在不在我的开发机器上)

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"  

【讨论】:

  • 嗨,不工作 (-: "Writer 必须是 Zend_Log_Writer_Abstract 的一个实例或者你应该传递一个配置数组" $bootstrap = $this->getInvokeArg('bootstrap'); $log = $bootstrap ->getResource('log'); $log->info('x');
【解决方案4】:

自 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 记录器示例,但同样适用于所有日志编写器)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多