2009-12-28 3 views

risposta

13

Buona domanda. Non riesco a trovare un modo per creare un'istanza di Zend_Log_Writer_Db da una configurazione di bootstrap. La classe writer richiede un oggetto Zend_Db_Adapter. Non accetta una stringa.

Il progetto ZF deve sviluppare ulteriormente questo caso d'uso. Non hanno nemmeno alcun test unitario per Zend_Application_Resource_Log che include un writer Db.

Il meglio che posso suggerire fino ad allora è che la classe Bootstrap deve personalizzare la risorsa Log in un metodo _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

Grazie Bill! Una modifica: $ log-> addWriter ($ writer); – steve

1

Qui nel manual: è possibile trovare un esempio di come scrivere il file di log nei database.Is questo che vuoi dire?

+0

Ciao, no. Voglio aggiungere la risorsa registro al mio application.ini. Come DB Adapater e altre cose. In ZF 1.10 è disponibile questa nuova risorsa. – opHASnoNAME

1

Questo dovrebbe funzionare - mi metterà alla prova ampiamente in seguito (non a mia macchina dev ora)

Zend_Application_Resource_Log può impostare un'istanza di uno Zend_Log da 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

Ciao, non funziona (-: "Writer deve essere un'istanza di Zend_Log_Writer_Abstract o dovresti passare un array di configurazione" $ bootstrap = $ this-> getInvokeArg ('bootstrap'); $ log = $ bootstrap-> getResource ('log'); $ log-> info ('x'); – opHASnoNAME

1

A partire da ZF 1.10alpha (almeno), quanto segue è stato vero.

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

NOTA: la chiave dell'array arbitraria "firebug". Quando la fabbrica Zend_Log sforna la configurazione del log della risorsa, l'esempio 1 verrà passato come array a Zend_Log-> addWriter() (attivando il metodo _constructWriterFromConfig()), mentre l'esempio 2 passerà semplicemente una stringa (attivando un'eccezione).

(so che questo è vecchio, e sto usando un esempio di logger Firebug, ma lo stesso vale per tutti gli scrittori di registro)

Problemi correlati