Frage

Ich habe CakePHP 2.4.4 verwendet, um den interaktiven Webteil meiner App zu erstellen, und das läuft sehr gut.CakePHP ist großartig.

Ich führe jetzt einige unterstützende Hintergrundprozesse durch.Die Konsole und die Shell scheinen dafür geeignet zu sein, da sie Zugriff auf die Modelle haben.

Ich habe den Code geschrieben und er funktioniert, aber ich versuche, in dasselbe Protokoll zu schreiben, das ich für die Modelle verwende.In den Modellen habe ich eine AfterSave-Funktion, um alle Datenbankänderungen zu protokollieren, und ich habe sie einfach verwendet $this->log("$model $logEntry", 'info'); ins Protokoll schreiben.

Das funktioniert in der Shell nicht, aber ich dachte das CakeLog::write('info', "$model $logEntry"); könnte funktionieren, aber es funktioniert auch nicht.

Muss ich CakeLog initialisieren, um auf die richtigen Protokolldateien zu verweisen?

<?php
App::uses('CakeTime', 'Utility');
App::uses('CakeLog', 'Utility');

class ProcessRequestShell extends AppShell {
    //Need to access the request and monitor tables
    public $uses = array('Request');

    private function updateRequest($data){
        $model = 'Request';
        $result = $this->Request->save($data);

        $logEntry = "UPDATE ProcessRequestShell ";
        foreach ($data[$model] AS $k => $v){$logEntry .= "$k='$v' ";}
        if ($result){
            //$this->log("$model $logEntry", 'info');
            CakeLog::write('info', "$model $logEntry");
        } else {
            //$this->log("$model FAILED $logEntry", 'error');
            CakeLog::write('error', "$model FAILED $logEntry");
        }
        return($result);
    }

    public function main() {
        $options = array('conditions' => array('state' => 0, 'next_state' => 1));
        $this->Request->recursive = 0;
        $requests = $this->Request->find('all', $options);

        //See if the apply_changes_on date/time is past
        foreach ($requests AS $request){
            $this->out("Updating request ".$request['Request']['id'], 1, Shell::NORMAL);

            //Update the next_state to "ready"
            $request['Request']['state'] = 1;
            $request['Request']['next_state'] = 2;
            $this->updateRequest($request);
        }
    }
}
?>
War es hilfreich?

Lösung

Haben Sie einen Standard-Listener/-Bereich für diese Protokolltypen eingerichtet?Wenn nicht, werden sie nicht protokolliert.

// Setup a 'default' cache configuration for use in the application.
Cache::config('default', array('engine' => 'File'));

Zum Beispiel in Ihrer bootstrap.php

Sehen http://book.cakephp.org/2.0/en/appendices/2-2-migration-guide.html#log

Andere Tipps

Sie müssen es einrichten default Protokollstrom schreibt schließlich in eine Datei app/Config/bootstrap.php.

CakeLog konfiguriert sich nicht mehr automatisch.Infolgedessen werden Protokolldateien nicht mehr automatisch erstellt, wenn kein Stream zuhört.Stellen Sie sicher, dass Sie mindestens einen haben default Stream Setup, wenn Sie alle Arten und Ebenen anhören möchten.Normalerweise können Sie einfach den Kern festlegen FileLog Klasse zum Ausgabe in app/tmp/logs/:

CakeLog::config('default', array(
    'engine' => 'File'
));

Sehen Protokollierung → In Protokolle schreiben Abschnitt des CookBook 2.x

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top