Pregunta

He estado usando CakePHP 2.4.4 para construir la web interactivo parte de mi aplicación y que va muy bien.CakePHP es impresionante.

Yo ahora estoy haciendo algunas apoyo a los procesos de fondo.La Consola de Shell y parece ser el camino para hacerlo como se tiene acceso a los Modelos.

He escrito el código y lo tengo funcionando, pero estoy tratando de escribir en el mismo registro que yo uso para los Modelos.En los modelos que tengo un método aftersave función para registrar todos los cambios de base de datos y que sólo utiliza el $this->log("$model $logEntry", 'info'); para escribir en el registro.

Que no funciona en el Shell, pero pensé que la CakeLog::write('info', "$model $logEntry"); podría funcionar, pero no cualquiera.

Qué necesito para iniciar el CakeLog a punto para el correcto registro de los archivos?

<?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);
        }
    }
}
?>
¿Fue útil?

Solución

¿Estableció un escuchador / ámbito predeterminado para esos tipos de registro? Si no, no se registrarán.

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

en su bootstrap.php, por ejemplo,

consulte http://book.cakephp.org / 2.0 / ES / Apéndices / 2-2-Migration-Guide.html # log

Otros consejos

Usted necesita instalación default secuencia de registro de escribir en el archivo, finalmente, en app/Config/bootstrap.php.

CakeLog no auto-configurarse más.Como resultado, los archivos de registro no se auto-creado, ya que si no hay flujo de escucha.Asegúrese de que tienes al menos una default flujo de configurar, si usted desea escuchar todos los tipos y niveles.Generalmente, usted puede establecer el núcleo FileLog clase la salida en app/tmp/logs/:

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

Ver Registro → Escritura a los registros de la sección de el libro de cocina de 2.x

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top