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 way™」で物事を行うことを好みます。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すべてのタイプとレベルを聴きたい場合は、少なくとも 1 つのストリームが設定されていることを確認してください。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 に答える