CodeIgniterCodeIgniter

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