2010-07-09 128 views
60

我想在PHP CodeIgniter中進行錯誤日誌記錄。我如何啓用錯誤日誌記錄?如何在CodeIgniter(PHP)中執行錯誤日誌記錄

我有一些問題:

  1. 什麼都記錄一個錯誤的步驟?
  2. 如何創建錯誤日誌文件?
  3. 如何將錯誤消息推送到日誌文件(每當發生錯誤時)?
  4. 如何通過電子郵件將錯誤發​​送至電子郵件地址?

回答

117

笨內置了一些錯誤日誌記錄功能。

  • 讓你/應用/日誌文件夾
  • /application/config/config.php設置
    $config['log_threshold'] = 1;
    或使用更高的數量,取決於你想在你的日誌中有多少細節
  • 使用log_message('error', 'Some variable did not contain a value.');
  • 要發送電子郵件,您需要擴展核心CI_Exceptions類方法log_exceptions()。你可以自己做或者使用this。在擴展核心更多信息here

http://www.codeigniter.com/user_guide/general/errors.html

+2

現在的鏈接是[http://ellislab.com/codeigniter/user-guide/general/errors.html](http://ellislab.com/codeigniter/user-guide/general/errors.html) – machineaddict 2013-05-15 09:15:59

+0

Are there對此有任何安全影響? – 2014-08-12 01:51:42

+0

這會將數據轉儲到一個php文件,其文件名格式爲:log- [Y-m-d H:i:s]或在配置文件中定義的log_date_format密鑰配置上設置的任何值。只要你不記錄/轉儲敏感數據,它應該是非常安全的。這個文件默認是相對於index.html頁面的,所以顯然生成的php文件不會公開訪問 - 但是你永遠不會知道。如果您更改默認的應用程序/日誌目錄,請務必採取所有這些預防措施。 – 2015-01-29 02:56:46

17

要簡單地在服務器的錯誤日誌中放一行,使用PHP的error_log()函數。但是,該方法不會發送電子郵件。

首先,觸發一個錯誤:

trigger_error("Error message here", E_USER_ERROR); 

默認情況下,這會在服務器的錯誤日誌文件。請參閱Apache的ErrorLog directive。要設置自己的日誌文件:

ini_set('error_log', 'path/to/log/file'); 

請注意,您選擇的日誌文件必須已經存在,並且由服務器進程可寫。使文件可寫的最簡單方法是使服務器用戶成爲文件的所有者。 (該服務器用戶可能沒有人,_www,阿帕奇,還是別的什麼,這取決於你的操作系統分發)

以電子郵件的錯誤,你需要建立一個自定義錯誤處理程序:

function mail_error($errno, $errstr, $errfile, $errline) { 
    $message = "[Error $errno] $errstr - Error on line $errline in file $errfile"; 
    error_log($message); // writes the error to the log file 
    mail('[email protected]', 'I have an error', $message); 
} 
set_error_handler('mail_error', E_ALL^E_NOTICE); 

欲知更多信息,請參閱relevant PHP documentation

+0

無價。感謝你的分享。 – kta 2017-04-29 03:37:28

2

還要確保您已允許笨登錄您在配置文件中想要的消息類型。

$config['log_threshold'] = [log_level ranges 0-4];