5

application.ini から zend ログのインスタンスをセットアップする方法の例はありますか? ファイルにログを記録する例しか見つかりませんでしたが、SQLITE データベース テーブルにログインしたいですか?

Zend ログ リソース

4

4 に答える 4

13

良い質問。ブートストラップ構成からインスタンス化する方法が見つかりませんZend_Log_Writer_Db。ライター クラスにはZend_Db_Adapterオブジェクトが必要です。文字列は受け付けません。

ZF プロジェクトは、このユース ケースをさらに発展させる必要があります。Zend_Application_Resource_LogDbライターを含む単体テストさえありません。

それまでに私が提案できる最善の方法は、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);
    }
  }

}
于 2010-01-09T20:46:23.463 に答える
1

ここの マニュアルで:あなたはあなたのログファイルをデータベースに書き込む方法の例を見つけることができます。それはあなたが意味することですか?

于 2010-01-05T13:18:47.293 に答える
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 に答える
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 に答える