3

我有一个从 PayPal 接收即时付款通知的 CakePHP 应用程序。我想记录 PayPal 发布的数据。我可以使用以下方法轻松做到这一点:

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

但我更喜欢尽可能使用“CakePHP 方式™”。我已经浏览了 CakePHP 食谱的“Core Libraries > Logging”部分,但无法理解它。我知道这样做是正确的:

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

尽管上述方法似乎确实有效,但它也可能导致问题,如此处所示

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

4

2 回答 2

4

你想要什么在这里解释http://book.cakephp.org/2.0/en/core-libraries/logging.html#creating-and-configuring-log-streams

但我建议您阅读整页,而不仅仅是本节。

我会将ipn逐个字段写入数据库表,而不是写入文件日志。我可以根据我对 paypal API 的经验告诉你这一点。优点很明显,例如,您可以查找 ipns 以获取订单、搜索错误等。

于 2012-08-15T23:37:06.483 回答
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您需要的自定义文件,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'
));
于 2015-04-13T12:42:25.800 回答