2014-02-26 2 views
1

저는 CakePHP 2.4.4를 사용하여 내 앱의 대화 형 웹 파트를 작성했으며 매우 잘 진행되고 있습니다. CakePHP는 굉장합니다.콘솔 셸에서 로그 작성하기

현재 일부 백그라운드 프로세스를 지원하고 있습니다. 콘솔과 셸은 모델에 액세스 할 때 콘솔과 셸을 사용하는 방법 인 것 같습니다.

코드를 작성하고 작동 시키지만 모델에 사용하는 로그와 동일한 로그에 쓰려고합니다. 모델에서 모든 데이터베이스 변경 사항을 기록하는 afterSave 함수가 있으며 방금 로그에 쓸 때 $this->log("$model $logEntry", 'info');을 사용했습니다.

쉘에서 작동하지 않지만 CakeLog::write('info', "$model $logEntry");이 작동 할 수 있다고 생각했지만 문제가 될 수도 있습니다.

올바른 로그 파일을 가리 키도록 CakeLog를 초기화해야합니까?

<?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); 
     } 
    } 
} 
?> 
+0

나는 당신이 시도해야한다고 생각 요리 책 2.x에서의 Logging → Writing to logs 섹션 참조 :'CakeLog :: 쓰기 (' info ', $ model. $ logEntry);' – jimmymadon

+0

위의 내 의견에 차이가 있어서는 안됩니다. 두 가지 방법 모두 나를 위해 일합니다. '$ this-> Request-> log ("$ model $ logEntry", 'info');'를 사용하면 같은 행동을합니까? – jimmymadon

답변

0

이러한 로그 유형에 대한 기본 수신기/범위를 설정 했습니까? 그렇지 않으면 기록되지 않습니다. 예를

에 대한 bootstrap.php에서

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

당신은 app/Config/bootstrap.php에, 결국 파일로 설치 default 로그 스트림 쓰기에 필요 http://book.cakephp.org/2.0/en/appendices/2-2-migration-guide.html#log

+0

지금 문제가 있습니다. 나는 이미 로그 설정을 했었고 로그에는 항상 기록했지만 다른 로그 세트는 기록했습니다. Controller/Model에서는 AppName/tmp/logs에 기록하지만 Shell에서는 AppName/app/tmp/logs에 기록합니다. – DuaneW

0

참조하십시오.

CakeLog더 이상하지 자동 구성 자체를 않습니다. 결과적으로 스트림이 수신되지 않으면 로그 파일 이 자동으로 생성되지 않습니다. 모든 유형 및 레벨을 듣고 싶다면 default 스트림을 하나 이상 설정해야합니다. 일반적으로, 당신은 단지 app/tmp/logs/로 출력 핵심 FileLog 클래스 을 설정할 수 있습니다

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