Запись журналов из оболочки консоли
-
21-12-2019 - |
Вопрос
Я использую CakePHP 2.4.4 для создания интерактивной веб-части своего приложения, и дела идут очень хорошо.CakePHP — это круто.
Сейчас я выполняю некоторые поддерживающие фоновые процессы.Консоль и оболочка, похоже, подходят для этого, поскольку у них есть доступ к моделям.
Я написал код, и он работает, но я пытаюсь записать его в тот же журнал, который использую для моделей.В моделях у меня есть функция afterSave для регистрации всех изменений базы данных, и я просто использовал функцию $this->log("$model $logEntry", 'info');
записать в журнал.
Это не работает в Shell, но я думал, что 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);
}
}
}
?>
Решение
Настроили ли вы прослушиватель/область по умолчанию для этих типов журналов?В противном случае они не будут зарегистрированы.
// Setup a 'default' cache configuration for use in the application.
Cache::config('default', array('engine' => 'File'));
Например, в вашем bootstrap.php
Видеть http://book.cakephp.org/2.0/en/appendices/2-2-migration-guide.html#log
Другие советы
Вам необходимо настроить default
запись потока журнала в файл, в конечном итоге, в app/Config/bootstrap.php
.
CakeLog
больше не настраивается автоматически.В результате файлов журнала больше не будут автоматически создаваться, если поток не слушает.Убедитесь, что у вас есть хотя бы одинdefault
Настройка потока, если вы хотите прослушать все типы и уровни.Обычно вы можете просто установить ядроFileLog
класс для вывода вapp/tmp/logs/
:CakeLog::config('default', array( 'engine' => 'File' ));
Видеть Ведение журнала → Запись в логи раздел CookBook 2.x