application.ini から zend ログのインスタンスをセットアップする方法の例はありますか? ファイルにログを記録する例しか見つかりませんでしたが、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.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 ロガーの例を使用していますが、同じことがすべてのログライターに適用されます)
これはうまくいくはずです - 後で完全にテストします (今は私の開発マシンではありません)
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"