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

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 uma default fluxo de configurar, se você quer ouvir todos os tipos e níveis.Normalmente, você pode apenas definir o núcleo FileLog classe para saída em app/tmp/logs/:

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

Ver O registo → Escrever os logs seção do Livro 2.x

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top