La escritura de los Registros de la Consola de Shell
-
21-12-2019 - |
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);
}
}
}
?>
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 unadefault
flujo de configurar, si usted desea escuchar todos los tipos y niveles.Generalmente, usted puede establecer el núcleoFileLog
clase la salida enapp/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