2012-08-15 152 views
3

我有一個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

回答

4

你要的是這裏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

2

根據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' 
)); 
相關問題