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

时间:2012-08-15 21:13:11

标签: cakephp logging

我有一个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?

2 个答案:

答案 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'
));