我有一个CakePHP应用程序,可以从PayPal接收即时付款通知。我想记录PayPal发布的数据。我可以使用这样的东西轻松地做到这一点:
file_put_contents(LOGS . 'ipns.log', date('Y-m-d H:i:s ') . print_r($_POST, true) . "\n", FILE_APPEND|LOCK_EX);
但我更愿意尽可能地做“CakePHP way™”。我已经浏览了the "Core Libraries > Logging" section of CakePHP's cookbook并且无法理解它。我知道这样做 是正确的:
CakeLog::write('ipns', print_r($_POST, true));
尽管上述情况确实有效,但它也会导致问题,如here所示。
那么CakePHP的做法是什么?或者我应该只使用此问题顶部显示的原始PHP?
答案 0 :(得分:4)
这里解释了您想要的内容http://book.cakephp.org/2.0/en/core-libraries/logging.html#creating-and-configuring-log-streams
但我建议你阅读整个页面而不仅仅是这一部分。
我会按字段将ipn写入数据库表,而不是写入文件日志。我可以根据我对paypal API的经验告诉你这个问题。显而易见的优点是,您可以查找ipns查找订单,搜索错误等等。
答案 1 :(得分:3)
根据2.x食谱的 Logging 部分的Writing to log段:
CakeLog
不再自动配置。结果是日志文件 如果没有流正在侦听,则不会再自动创建。确保 如果你想听,你至少设置了一个default
流 所有类型和级别。通常,您只需设置核心FileLog
类 输出到app/tmp/logs/
:CakeLog::config('default', array( 'engine' => 'File' ));
因此,为了使CakeLog::write('ipns', print_r($_POST, true));
能够在app/tmp/logs/ipns.log
而不是:{/ p>中写入自定义文件app/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'
));