CakePHP 2.x:自定义日志记录

问题描述:

我有一个CakePHP应用程序,它接收来自PayPal的即时付款通知。我想记录PayPal发布的数据。我可以轻松地用这样的事情:CakePHP 2.x:自定义日志记录

file_put_contents(LOGS . 'ipns.log', date('Y-m-d H:i:s ') . print_r($_POST, true) . "\n", FILE_APPEND|LOCK_EX); 

但我更喜欢做的事情“CakePHP的方式™”只要有可能。我已经浏览了the "Core Libraries > Logging" section of CakePHP's cookbook,并且无法理解它。我知道这是不是正确做到这一点:

CakeLog::write('ipns', print_r($_POST, true)); 

虽然上面似乎工作,它也可能会造成问题,如图所示here

那么CakePHP的做法是什么?或者我应该使用这个问题顶部显示的原始PHP?

+0

我supp提出这是蛋糕的方式。它只是越野车。使用它,知道它可能导致的问题,或使用纯PHP,这可能是蛋糕在底下使用的。 – rlcabral 2012-08-15 21:35:04

+1

不是。蛋糕的方式是使用自定义记录器。 – burzum 2012-08-15 23:37:36

你要的是这里http://book.cakephp.org/2.0/en/core-libraries/logging.html#creating-and-configuring-log-streams

解释,但我建议你阅读整个页面,而不仅仅是这一部分。

我会将ipn写入数据库表字段,而不是写入文件日志。我可以根据我对paypal API的经验告诉你。显而易见的好处是,您可以查找订单的ipns,搜索错误等。

+1

感谢您的回答,但我仍然无法理解食谱。另外,还有一个我想实现日志记录的实例。我有一个偶尔被机器人填写的表单,所以我添加了一些虚假的字段并用CSS隐藏了它们。我想记录每当一个机器人被发现,像这样:'if($ this-> request-> data ['Model'] ['fake_field']!=''){CakeLog :: write('bot_log' ,'Bot from'。CakeRequest :: clientIp()。':'。print_r($ this-> request-> data,true));}'。我希望它在“bot_log.log”中,而不是“debug.log”或其他任何东西。你介意提供一个代码示例吗? – Nick 2012-08-22 21:37:43

根据Writing to log款2.x的菜谱日志节:

CakeLog不会自动进行自我配置了。因此如果没有流正在侦听,日志文件 将不会自动创建。确保 你至少得到了一个default流设置,如果你想听 所有类型和水平。通常情况下,你可以设置核心FileLog类 输出到app/tmp/logs/

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

因此,为了使CakeLog::write('ipns', print_r($_POST, true));写入到自定义文件app/tmp/logs/ipns.logapp/Config/bootstrap.php需要,而不是:

/** 
* Configures default file logging options 
*/ 
App::uses('CakeLog', 'Log'); 
CakeLog::config('debug', array(
    'engine' => 'File', 
    'types' => array('notice', 'info', 'debug'), 
    'file' => 'debug', 
)); 
CakeLog::config('error', array(
    'engine' => 'File', 
    'types' => array('warning', 'error', 'critical', 'alert', 'emergency'), 
    'file' => 'error', 
)); 

写:

/** 
* Configures default file logging options 
*/ 
App::uses('CakeLog', 'Log'); 
CakeLog::config('default', array(
    'engine' => 'File' 
));