CodeIgniter Error Handler 處理

CodeIgniter

CodeIgniter 在處理 PHP Error handler 是直接呼叫內建的 Exceptions Class 顯示在瀏覽器上,如果有打開 log,系統另外會紀錄在 application/logs 目錄。這是 CodeIgniter 預設作法,但是我希望能把這些錯誤訊息都紀錄到 Database,相關 Notice, Error 訊息都一律寫到 DB 裡面,但是如果用 extend 系統內的 Exceptions 是完全做不到的,所以我寫了一個 Library 只要直接 include 系統就可以直接開始紀錄,因為在 PHP 你會遇到無數種 User experience,都會產生相關錯誤訊息,在產品上線都會將 display_errors 設定為 0,不要讓使用者看到任何錯誤訊息,但是我們還是需要全部的錯誤訊息阿,底下來看看如何安裝 Log Library。

建立 log table 可以直接參考

連結,或者是複製底下資料貼到 phpMyAdmin。

--
-- Table structure for table `logs`
--

DROP TABLE IF EXISTS `logs`;
CREATE TABLE IF NOT EXISTS `logs` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `errno` int(2) NOT NULL,
  `errtype` varchar(32) CHARACTER SET utf8 NOT NULL,
  `errstr` text CHARACTER SET utf8 NOT NULL,
  `errfile` varchar(255) CHARACTER SET utf8 NOT NULL,
  `errline` int(4) NOT NULL,
  `time` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

安裝 如果你熟悉

CodeIgniter getsparks,可以透過 command line 安裝

$ php tools/spark install -v1.0.0 codeigniter-log
那也可以透過複製檔案的方式安裝:
$ cp config/log.php your_application/config/
$ cp libraries/Lib_log.php your_application/libraries/
$ cp controllers/example.php your_application/controllers/

使用方式 如果是透過 getsparks 安裝,請將底下程式碼寫到

__construct function 裡面

$this->load->spark('codeigniter-log/1.0.0');
如果是手動安裝,請改成底下
$this->load->library('lib_log');
接著可以在程式碼任何地方紀錄您要的錯誤訊息
trigger_error("User error via trigger.", E_USER_ERROR);
trigger_error("Warning error via trigger.", E_USER_WARNING);
trigger_error("Notice error via trigger.", E_USER_NOTICE);
可以參考

Example Screenshot: 如果有任何問題,可以參考 Github 專案 或 getspark


See also