Escrito Logs a partir do Console do Shell
-
21-12-2019 - |
Pergunta
Tenho vindo a utilizar o CakePHP 2.4.4 para construir a web interativa parte do meu aplicativo e que está indo muito bem.O CakePHP é impressionante.
Agora estou fazendo algumas apoiar processos de plano de fundo.O Console e o Escudo parece ser o caminho para fazê-lo como ele tem acesso aos Modelos.
Eu tenho escrito o código e têm que trabalhar, mas estou tentando escrever para o mesmo registo que eu uso para os Modelos.Em modelos de eu ter um afterSave função de log de todas as alterações de banco de dados e apenas usei o $this->log("$model $logEntry", 'info');
para escrever o registo.
Que não funciona na Shell, mas eu pensei que o CakeLog::write('info', "$model $logEntry");
pode funcionar, mas ele não quer.
Eu preciso inicializar o CakeLog para apontar para os arquivos de log correto?
<?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);
}
}
}
?>
Solução
Você configurar um padrão ouvinte/âmbito de aplicação para os tipos de registo?Se não, eles não são registradas.
// Setup a 'default' cache configuration for use in the application.
Cache::config('default', array('engine' => 'File'));
Em seu bootstrap.php por exemplo
Ver http://book.cakephp.org/2.0/en/appendices/2-2-migration-guide.html#log
Outras dicas
Você precisa de instalação default
fluxo de log de escrita para o ficheiro, eventualmente, em app/Config/bootstrap.php
.
CakeLog
não se auto-configurar-se mais.Como resultado, os arquivos de log não serão auto-criado, mais se não houver fluxo de escuta.Certifique-se de você tem pelo menos umadefault
fluxo de configurar, se você quer ouvir todos os tipos e níveis.Normalmente, você pode apenas definir o núcleoFileLog
classe para saída emapp/tmp/logs/
:CakeLog::config('default', array( 'engine' => 'File' ));
Ver O registo → Escrever os logs seção do Livro 2.x