**自
#使用方法
* 首先,請在chrome瀏覽器上安裝好外掛程式。
* 然後,啟用websocket服務, 在命令列中執行 `php php/socketlog.server.php` , 將會在本地起乙個websocket服務 ,監聽埠是1229 。 如果想服務後台執行: `nohup php php/socketlog.server.php > /dev/null &`
* 在自己的程式中傳送日誌:
<?php
include './php/socketlog.class.php';
slog('hello world');
?>
複製**
* 用slog函式傳送日誌, 支援多種日誌型別:
slog('msg','log');//一般日誌
slog('msg','error');//錯誤日誌
slog('msg','info');//資訊日誌
slog('msg','warn');//警告日誌
slog('msg','trace');// 輸入日誌同時會打出呼叫棧
slog('msg','alert');//將日誌以alert方式彈出
slog('msg','log','color:red;font-size:20px;');//自定義日誌的樣式,第三個引數為css樣式
複製**
* 通過上面例子可以看出, slog函式支援三個引數:
* 第乙個引數是日誌內容,日誌內容不光能支援字串喲,大家如果傳遞陣列,物件等一樣可以列印到console中。
* 第二個引數是日誌型別,可選,如果沒有指定日誌型別預設型別為log, 第三個引數是自定樣式,在這裡寫上你自定義css樣式即可。
##配置
* 在載入socketlog.class.php檔案後,還可以對socketlog進行一些配置。
* 例如:我們如果想將程式的報錯資訊頁輸出到console,可以配置
<?php
include './php/socketlog.class.php';
slog(array(
'error_handler'=>true
),'set_config');
echo notice;//製造乙個notice報錯
slog('這裡是輸出的一般日誌');
?>
複製**
* 配置socketlog也是用slog函式, 第乙個引數傳遞配置項的陣列,第二個引數設定為set_config
* 還支援其他配置項
<?php
include './php/socketlog.class.php';
slog(array(
'host'=>'localhost',//websocket伺服器位址,預設localhost
'port'=>'1229',//websocket伺服器端口,預設埠是1229
'optimize'=>false,//是否顯示利於優化的引數,如果執行時間,消耗記憶體等,預設為false
'show_included_files'=>false,//是否顯示本次程式執行載入了哪些檔案,預設為false
'error_handler'=>false,//是否接管程式錯誤,將程式錯誤顯示在console中,預設為false
'force_client_id'=>'',//日誌強制記錄到配置的client_id,預設為空
'allow_client_ids'=>array()////限制允許讀取日誌的client_id,預設為空,表示所有人都可以獲得日誌。
),'set_config');
?>
複製**
* 設定client_id後能實現以下功能:
* 1,配置allow_client_ids 配置項,讓指定的瀏覽器才能獲得日誌,這樣就可以把除錯**帶上線。 普通使用者訪問不會觸發除錯,不會傳送日誌。 開發人員訪問就能看的除錯日誌, 這樣利於找線上bug。 client_id 建議設定為姓名拼命加上隨機字串,這樣如果有員工離職可以將其對應的client_id從配置項allow_client_ids中移除。 client_id除了姓名拼音,加上隨機字串的目的,以防別人根據你公司員工姓名猜測出client_id,獲取線上的除錯日誌。
* 設定allow_client_ids示例**:
slog(array(
'allow_client_ids'=>array('luofei_zfh5nbln','easy_djq0z80h')
),'set_config')
複製**
* 2, 設定force_client_id配置項,讓後台指令碼也能輸出日誌到chrome。 **有可能用了佇列,一些業務邏輯通過後台指令碼處理, 如果後台指令碼需要除錯,你也可以將日誌列印到瀏覽器的console中, 當然後台指令碼不和瀏覽器接觸,不知道當前觸發程式的是哪個瀏覽器,所以我們需要強制將日誌列印到指定client_id的瀏覽器上面。 我們在後台指令碼中使用socketlog時設定force_client_id 配置項指定要強制輸出瀏覽器的client_id 即可。
* 示例**:
<?php
include './php/socketlog.class.php';
slog(array(
'force_client_id'=>'luofei_zfh5nbln'
),'set_config');
slog('test');`
複製**
##對資料庫進行除錯
* socketlog還能對sql語句進行除錯,自動對sql語句進行explain分析,顯示出有效能問題的sql語句。 如下圖所示。
* 圖中顯示出了三條sql語句 , 第一條sql語句字型較大,是因為它又效能問題, 在sql語句的後台已經標註using filesort。 我們還可以點選某個sql語句看到sql執行的呼叫棧,清楚的知道sql語句是如何被執行的,方便我們分析程式、方便做開源程式的二次開發。圖中第三條sql語句為被點開的狀態。
* 用slog函式列印sql語句是,第二個引數傳遞為mysql或mysqli的物件即可。 示例**:
$link=mysql_connect('localhost:3306','root','123456',true);
mysql_select_db('kuaijianli',$link);
$sql="select * from `user`";
slog($sql,$link);
複製**
後面會以onethink為例項再對資料庫除錯進行演示。
* 注意,有時候在資料比較少的情況下,mysql查詢不會使用索引,explain也會提示using filesort等效能問題, 其實這時候並不是真正有效能問題, 你需要自行進行判斷,或者增加更多的資料再測試。
##對api進行除錯
**呼叫了api ,如何將api程式的除錯資訊也列印到瀏覽器的console中? 前面我們講了乙個配置 force_client_id, 能將日誌強制記錄到指定的瀏覽器。 用這種方式也可以將api的除錯資訊列印到console中,但是force_client_id 只能指定乙個client_id, 如果我們的開發環境是多人共用,這種方式就不方便了。
其實只要將瀏覽器傳遞給**的user-agent 再傳遞給api, api程式中不用配置force_client_id, 也能識別當前訪問程式的瀏覽器, 將日誌列印到當前訪問程式的瀏覽器, 我們需要將sdk**稍微做一下修改。 呼叫api的sdk,一般是用curl寫的,增加下面**可以將瀏覽器的user-agent傳遞到api 。
複製**
<?php
include './socketlog.class.php';
slog(array(
'error_handler'=>true,
'optimize'=>true,
'show_included_files'=>true
),'set_config');
複製**
- 編輯thinkphp/library/think/db/driver/mysqli.class.php 檔案, 如果你用的資料庫驅動型別不是mysqli,而是mysql,那麼請開啟mysql.class.php, 找到執行sql語句的地方, 這個類中得execute 方法為乙個執行sql語句的方法,大約在119行處,增加**:
slog($this->querystr,$this->_linkid);
複製**
- 類中的query方法也是乙個執行sql語句的地方, 同樣需要增加上面的**, 大約在92行增加slog($this->querystr,$this->_linkid);
- 然後瀏覽**看看效果:
快速通過CMMI評估
終於訪談結束了,最近的幾個月,進行了備受煎熬的cmmi 認證活動,起初對這個東西非常的陌生,也沒有很多的資料可供參考,經過幾個月的摸索,也掌握了 cmmi 認證的一些道道,其實現在說來倒是覺得cmmi 認證沒有想象的那麼複雜,但如果起初沒有足夠的經驗可供參考,那麼摸索的過程是很痛苦的,趁著現在頭腦還...
通過CodeIgniter快速開發Web應用(一)
基礎概覽 1 codeigniter 生成的 url 非常乾淨,而且對搜尋引擎友好。不同於標準的 查詢字串 方法,codeigniter 使用了基於段的方法 2 codeigniter 可擴充套件 系統可以非常簡單的通過你自己的類庫和輔助函式來擴充套件,也可以通過 類擴充套件或系統鉤子來實現 cod...
如何快速通過CMMI評估
終於訪談結束了,最近的幾個月,進行了備受煎熬的cmmi認證活動,起初對這個東西非常的陌生,也沒有很多的資料可供參考,經過幾個月的摸索,也掌握了 cmmi認證的一些道道,其實現在說來倒是覺得cmmi認證沒有想象的那麼複雜,但如果起初沒有足夠的經驗可供參考,那麼摸索的過程是很痛苦的,趁著現在頭腦還比較熱...