我一直在使用CakePHP 2.4.4来构建我的应用程序的交互式Web部分,这非常顺利。 CakePHP太棒了。
我现在正在做一些支持后台流程。 Console和Shell似乎是可以访问模型的方式。
我已编写代码并使其正常工作,但我正在尝试写入我用于模型的相同日志。在模型中,我有一个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);
}
}
}
?>
答案 0 :(得分:0)
您是否为这些日志类型设置了默认侦听器/范围? 如果没有,他们将不会被记录。
// 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
答案 1 :(得分:0)
您需要在default
中设置app/Config/bootstrap.php
日志流写入文件。
CakeLog
不再自动配置。结果是日志文件 如果没有流正在侦听,则不会再自动创建。确保 如果你想听,你至少设置了一个default
流 所有类型和级别。通常,您只需设置核心FileLog
类 输出到app/tmp/logs/
:CakeLog::config('default', array( 'engine' => 'File' ));
参见CookBook 2.x的Logging → Writing to logs部分