ThinkPHP5.0增強(qiáng)了開發(fā)調(diào)整功能,通過強(qiáng)化\think\Log類的功能實(shí)現(xiàn)了在不同的環(huán)境下面可以使用相同的方法進(jìn)行調(diào)試和輸出。
## 調(diào)試方法
系統(tǒng)提供了統(tǒng)一的調(diào)試和寫入方法,例如:
~~~
// 記錄調(diào)試信息到內(nèi)存 系統(tǒng)由 \think\Log::save()方法統(tǒng)一寫入
\think\Log::record('調(diào)試信息','日志類型');
// 直接寫入調(diào)試信息
\think\Log::write('調(diào)試信息','日志類型');
~~~
最主要的方法就是 `\think\Log::record()`,系統(tǒng)也提供了一個(gè)快捷操作方法trace:
~~~
trace('調(diào)試信息','log');
trace(['aaa','bbb'],'debug');
~~~
> record方法支持各種變量的調(diào)試輸出。
使用`Log::record()`或者`trace`方法后,通過設(shè)置就可以在下面不同的環(huán)境中輸出調(diào)試結(jié)果。
## 本地文件調(diào)試
設(shè)置如下:
~~~
'log'=>[
'type'=>'file',
'path'=> LOG_PATH,
]
~~~
會(huì)在`LOG_PATH`下面生成調(diào)試日志文件。
## 頁面Trace調(diào)試
設(shè)置如下:
~~~
'response_exit'=>false,
'log'=>[
'type'=>'trace',
'trace_file'=> THINK_PATH.'tpl/page_trace.tpl',
]
~~~
運(yùn)行后可以看到右下角出現(xiàn)了如下圖示:

點(diǎn)擊圖標(biāo)后可以看到詳細(xì)的頁面Trace信息

可以切換顯示不同的Tab項(xiàng)查看不同類型的日志信息。
> 需要注意的是,如果要使用頁面Trace調(diào)試功能,需要設(shè)置response_exit為false(否則無法在控制器輸出之后顯示頁面Trace信息)。
## SocketLog調(diào)試
ThinkPHP5.0版本開始,整合了SocketLog用于本地和遠(yuǎn)程調(diào)試。
設(shè)置如下:
~~~
'log'=>[
'type' => 'socket',
'host' => 'slog.thinkphp.cn',
//日志強(qiáng)制記錄到配置的client_id
'force_client_ids' => [],
//限制允許讀取日志的client_id
'allow_client_ids' => [],
]
~~~
使用Chrome瀏覽器運(yùn)行后,打開審查元素->Console,可以看到如下所示:

SocketLog通過websocket將調(diào)試日志打印到瀏覽器的console中。你還可以用它來分析開源程序,分析SQL性能,結(jié)合taint分析程序漏洞。
### 安裝Chrome插件
SocketLog首先需要安裝chrome插件
Chrome插件安裝頁面: https://chrome.google.com/webstore/detail/socketlog/apkmbfpihjhongonfcgdagliaglghcod (需翻墻)
### 使用方法
* 首先,請(qǐng)?jiān)赾hrome瀏覽器上安裝好插件。
* 安裝服務(wù)端`npm install -g socketlog-server`?, 運(yùn)行命令?`socketlog-server`?即可啟動(dòng)服務(wù)。 將會(huì)在本地起一個(gè)websocket服務(wù) ,監(jiān)聽端口是1229 。 如果想服務(wù)后臺(tái)運(yùn)行:?`socketlog-server > /dev/null &`?我們提供公用的服務(wù)端,需要去申請(qǐng)client_id :?[http://111.202.76.133/](http://111.202.76.133/)
### 參數(shù)
* `client_id`: 在chrome瀏覽器中,可以設(shè)置插件的`Client_ID` ,**Client_ID**是你任意指定的字符串。?

* 設(shè)置`client_id`后能實(shí)現(xiàn)以下功能:
* 1,配置`allow_client_ids` 配置項(xiàng),讓指定的瀏覽器才能獲得日志,這樣就可以把調(diào)試代碼帶上線。 普通用戶訪問不會(huì)觸發(fā)調(diào)試,不會(huì)發(fā)送日志。 開發(fā)人員訪問就能看的調(diào)試日志, 這樣利于找線上bug。 **Client_ID** 建議設(shè)置為姓名拼音加上隨機(jī)字符串,這樣如果有員工離職可以將其對(duì)應(yīng)的`client_id`從配置項(xiàng)allow_client_ids中移除。 `client_id`除了姓名拼音,加上隨機(jī)字符串的目的,以防別人根據(jù)你公司員工姓名猜測(cè)出`client_id`,獲取線上的調(diào)試日志。
* 設(shè)置allow_client_ids示例代碼:
~~~
'allow_client_ids'=>['thinkphp_zfH5NbLn','luofei_DJq0z80H'],
~~~
* 2, 設(shè)置`force_client_id`配置項(xiàng),讓后臺(tái)腳本也能輸出日志到chrome。 網(wǎng)站有可能用了隊(duì)列,一些業(yè)務(wù)邏輯通過后臺(tái)腳本處理, 如果后臺(tái)腳本需要調(diào)試,你也可以將日志打印到瀏覽器的console中, 當(dāng)然后臺(tái)腳本不和瀏覽器接觸,不知道當(dāng)前觸發(fā)程序的是哪個(gè)瀏覽器,所以我們需要強(qiáng)制將日志打印到指定`client_id`的瀏覽器上面。 我們?cè)诤笈_(tái)腳本中使用SocketLog時(shí)設(shè)置`force_client_id` 配置項(xiàng)指定要強(qiáng)制輸出瀏覽器的`client_id` 即可。
- 介紹
- 快速入門
- 安裝配置
- 目錄結(jié)構(gòu)
- 系統(tǒng)架構(gòu)
- 命名規(guī)范
- 自動(dòng)生成
- 引導(dǎo)文件
- 自動(dòng)加載
- 配置
- 路由
- 控制器
- 模型
- 視圖
- 模板
- 自定義標(biāo)簽庫(kù)
- 數(shù)據(jù)庫(kù)
- 域名部署
- 輸入
- 緩存
- 日志
- 行為
- 多語言
- 調(diào)試
- 新特性介紹
- 增強(qiáng)路由功能
- 更靈活的控制器
- API開發(fā)支持
- 內(nèi)置SocketLog
- 新的自動(dòng)生成
- 利用Traits特性擴(kuò)展
- 自動(dòng)加載及Loader類
- 命令行工具集
- 附錄
- 升級(jí)指南
- 配置參考
- 錯(cuò)誤編碼
