2009-12-28 5 views

Répondre

13

Bonne question. Je ne peux pas trouver un moyen d'instancier le Zend_Log_Writer_Db à partir d'une configuration bootstrap. La classe writer requiert un objet Zend_Db_Adapter. Il n'accepte pas de chaîne.

Le projet ZF doit développer davantage ce cas d'utilisation. Ils n'ont même pas de tests unitaires pour Zend_Application_Resource_Log qui incluent un écrivain Db. Le meilleur que je puisse suggérer jusque-là est que votre classe Bootstrap doit personnaliser la ressource de journal dans une méthode _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); 
    } 
    } 

} 
+0

Merci Bill! Un changement: $ log-> addWriter ($ writer); – steve

1

Ici, dans le manual: vous pouvez trouver un exemple comment écrire votre fichier journal dans les database.Is que ce que vous voulez dire?

+0

Salut, non. Je veux ajouter la ressource de journal à mon application.ini. Comme DB Adapater et d'autres choses. En ZF 1.10 est cette nouvelle ressource disponible. – opHASnoNAME

1

Cela devrait fonctionner - je vais tester pleinement plus tard (pas ma machine dev maintenant)

Zend_Application_Resource_Log peut de configurer une instance d'un Zend_Log de 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" 
+0

Salut, ne fonctionne pas (-: "Writer doit être une instance de Zend_Log_Writer_Abstract ou vous devriez passer un tableau de configuration" bootstrap $ = $ this-> getInvokeArg ('bootstrap'); $ log = $ bootstrap-> getResource ('log'); $ log-> info ('x'); – opHASnoNAME

1

Depuis ZF 1.10alpha (au moins), ce qui suit a été vrai.

// e.g. 1 - works 
resources.log.firebug.writerName = "Firebug" 
// e.g. 2 - fails 
resources.log.writerName = "Firebug" 

REMARQUE: la clé de tableau arbitraire 'firebug'. Lorsque l'usine Zend_Log résout la configuration du journal de la ressource, l'exemple 1 sera passé en tableau à Zend_Log-> addWriter() (en déclenchant la méthode _constructWriterFromConfig()), alors que l'exemple 2 passera simplement une chaîne (en déclenchant une exception).

(je sais que c'est vieux, et je suis sur un exemple de l'enregistreur Firebug, mais le même pour tous les écrivains du journal)

Questions connexes