2009-12-28 6 views
5

Gibt es ein Beispiel, wie man eine Instanz von zend log aus der application.ini? Ich habe nur ein Beispiel für die Protokollierung in einer Datei gefunden, aber ich möchte mich in eine SQLITE-Datenbanktabelle einloggen?Zend_Log in application.ini

Zend Log resource

+0

Iam abount ZF 1.10alpha Mitteilung spricht .. – opHASnoNAME

Antwort

13

Gute Frage. Ich kann keine Möglichkeit finden, die Zend_Log_Writer_Db von einer Bootstrap-Konfiguration instanziieren. Die Writer-Klasse benötigt ein Objekt Zend_Db_Adapter. Es akzeptiert keine Zeichenfolge.

Das ZF-Projekt muss diesen Anwendungsfall weiter entwickeln. Sie haben nicht einmal Unit-Tests für Zend_Application_Resource_Log, die einen Db-Writer enthalten.

Das Beste, was ich bis dahin vorschlagen kann ist, dass Sie Bootstrap-Klasse die Log-Ressource in einer _initLog() Methode anpassen muss.

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

Danke Bill! Eine Änderung: $ log-> addWriter ($ writer); – steve

1

Hier im manual: Sie können ein Beispiel finden, wie Sie Ihre Log-Datei in die database.Is zu schreiben, was du meinst?

+0

Hallo, nein. Ich möchte die Log-Ressource zu meiner application.ini hinzufügen. Wie DB Adapater und andere Sachen. In ZF 1.10 ist diese neue Ressource verfügbar. – opHASnoNAME

1

Diese Arbeit sollte - ich werde später vollständig testen (an meinem dev Maschine nicht jetzt) ​​

Zend_Application_Resource_Log können Setup eine Instanz eines Zend_Log von 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

Hallo, funktioniert nicht (- "Writer muss eine Instanz von Zend_Log_Writer_Abstract sein oder Sie sollten ein Konfigurationsarray übergeben" $ bootstrap = $ this-> getInvokeArg ('bootstrap'); $ log = $ bootstrap-> getResource ('log'); $ log-> info ('x'); – opHASnoNAME

1

Seit ZF 1.10alpha (mindestens) ist das Folgende richtig gewesen.

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

HINWEIS: Der willkürliche Array-Schlüssel 'firebug'. Wenn die Zend_Log-Factory die Log-Konfiguration der Ressource durchläuft, wird Beispiel 1 als Array an Zend_Log-> addWriter() übergeben (löst die _constructWriterFromConfig() -Methode aus), während Beispiel 2 einfach eine Zeichenkette weitergibt (eine Ausnahme auslöst).

(Ich weiß, das alt ist, und ich bin mit einem Firebug Logger Beispiel, aber das gleiche gilt für alle Log-Autoren)