1、調試模式php
開啓調試模式後,能夠看到更加詳細的錯誤信息,調試模式的做用的在於顯示或者記錄更多的日誌信息,以便在開發過程當中快速定位和解決問題html
只須要在項目配置文件中添加一個'APP_DEBUG'=>true,便可開啓web
一、開啓調試模式後,系統在運行時會首先檢查是否認義了項目調試配置文件,若是沒有定義則使用系統調試配置文件(這是ThinkPHP爲咱們定義好的),系統調試配置文件爲系統目錄->Common->debug.php文件sql
二、在系統調試配置文件中,'DB_FIELDS_CACHE'=>false 即關閉數據表字段緩存,由於在調試模式下考慮到數據表結構會常常變更,因此默認只要開啓調試模式就關閉數據表字段緩存數據庫
所謂數據表字段緩存,就是ThinkPHP會將整個應用所涉及的表的結構都緩存到應用目錄->Runtime->Data->_files目錄中,每張表對應一個php文件,文件名就是表名,文件內容是一個記錄該表字段信息的數組!也就是說若是開啓了該緩存,那麼在直接對數據庫中的表結構進行的修改是不會反映到表結構緩存文件的,而在用Model對錶進行操做的時時是根據表結構緩存文件中的結構信息來的,因此會致使好比新加的一個字段插入不進去數據的問題數組
關於數據表結構緩存,這裏有一個連接瀏覽器
三、項目調試配置文件緩存
在應用目錄->Config目錄下新建一個debug.php文件,內容格式按照系統調試配置文件,最好是將系統調試配置文件的內容copy過來,而後再對其進行刪除、增長或修改函數
不論是否開啓調試模式,都會加載項目配置文件(顯然是的,不先加載項目配置文件,怎麼知道是否開啓了調試模式呢?對吧),若是沒有開啓調試模式則不會加載調試配置文件(系統/項目調試配置文件)的,並且調試配置文件(系統/項目)會覆蓋項目配置文件中的相同項!測試
文件加載順序(很重要)以下
系統配置文件---》項目配置文件---》系統調試配置文件 PS,注意,要麼是加載系統調試配置文件,要麼加載項目調試配置文件,並不會像配置文件
---》項目調試配置文件 那樣,首先加載系統配置文件再加載項目配置文件
四、運行狀態
開啓調試模式後,默認會顯示頁面的運行狀態信息,包括運行時間、數據庫讀寫次數、緩存讀寫次數、內存開銷,例如
而運行狀態信息並不是必須得在調試模式下才能顯示,也是能夠直接在項目配置文件中進行單獨配置的,能夠配置一項或多項
注意,這些信息默認是在模板的最後顯示的,可是若是你但願在模板其它地方顯示,那麼能夠經過將{__RUNTIME__}等等模板系統變量放到指定的位置顯示
五、頁面Trace
頁面Trace是ThinkPHP用於開發調試的輔助手段,在系統調試配置文件中是默認開啓的
·默認的Trace信息包括以下項
·還能夠自定義Trace信息
方式一:在應用目錄->Config目錄下新建一個trace.php文件,內容格式與項目配置文件同樣(返回一個Aarry),好比
方式二:在動做內經過trace()方法來增長trace信息
Trace模板也是能夠自定義的,上面所說的是自定義Trace信息,在自定義的Trace模板中的關鍵性代碼以下
默認的Trace模板是系統目錄->Tpl目錄->PageTrace.tpl.php文件,經過在項目配置文件中的'TMPL_TRACE_FILE'配置項進行配置,好比說'TMPL_TRACE_FILE'=>APP_PATH.'/Public/trace.php',那麼項目目錄->Public目錄->trace.php文件就是自定義的Trace模板
六、手動輸出調試信息(Action調試)
有時候調試模式並不能徹底知足咱們的需求,而須要手動輸出一些調試信息
·手動輸出變量信息
除了使用PHP內置的var_dump()函數和print_r()函數以外,還可使用ThinkPHP提供的對瀏覽器更加友好的dump()函數
·獲取某代碼段的運行狀態
debug_start($label='')和debug_end($label='')函數,好比說
·中斷程序執行並輸出相關信息
halt($mes);輸出錯誤信息並終止程序執行
七、模型調試(Model調試)
在模型中,爲了更好的查明錯誤,常常須要查看下最近使用的sql語句,那麼ThinkPHP就提供了getLastsql()方法來輸出上次執行的sql語句
輸出結果爲 SELECT * FROM think_user WHERE id = 1
八、調試類
更加高級的調試方式是使用調試類Debug,分別有三個靜態方法mark()、useTime()、useMemory(),做用分別爲標記一個調試位置、返回區間所用時間、返回區間所用內存,測試以下
實際上,細心的同窗可能發現用debug_start()和debug_end()所測試的相同代碼,在執行時間和使用內存上更小
注意一下,經過Debug類的源碼可知,useTime()實際上還有第三個參數
2、日誌記錄
日誌的處理工做是由系統自動完成的,在開啓日誌記錄的狀況下,會記錄容許的日誌級別的全部日誌信息。其中SQL級別日誌只有在調試模式開啓時纔有效!
系統的日誌記錄由核心的Log類完成,提供了多種方式記錄下不一樣的級別的日誌信息
一、開啓日誌記錄
在項目配置文件中,添加'LOG_RECORD'=>true便可開啓日誌記錄。通常在開啓日誌記錄以後,緊接着要指定運行記錄的日誌級別,經過'LOG_RECORD_LEVEL'=>array('日誌級別',...)
二、日誌級別
ps,在項目配置文件中指定日誌級別的時候,填的是字串而不是常量名
三、日誌記錄方式(自動記錄)
SYSTEM 經過發送到PHP的系統日誌目錄 Log類中對應的常量名值是0
MAIL 經過郵件方式發送 1
TCP 經過TCP方式發送 2
FILE 經過文件方式記錄(默認方式) 3
FILE方式的文件格式
年(簡寫)_月_日.log 好比16_08_23.log表示2016年8月23日的日誌文件
這裏所說的都是自動記錄日誌,自動記錄的日誌會保存到應用目錄->Runtime目錄->Logs目錄->年(簡寫)_月_日.log文件中
·能夠經過LOG_FILE_SIZE來限制日誌文件的大小,超過大小的日誌文件就會造成備份文件,備份文件的格式是在當前文件名的前面加上備份的時間戳,例如1189571417-07_09_12.log
·日誌文件的內容格式是[時間]日誌級別:日誌信息
·時間顯示格式可動態配置,默認採用的[c],能夠改爲例如Log::format='[Y-m-d H:i:s]',ps,格式與date()函數的用法一致
四、手動記錄
一般日誌文件的寫入都是自動完成的,若是須要在開發的過程當中手動記錄日誌信息,能夠經過Log類來實現
有兩種方式
方式一:直接使用Log::write()方法一步到位
方式二:先使用Log::record()方法將日誌寫入到內存中,而後再用Log::save()方法將內存中的日誌寫到磁盤中