我們有時需要記錄用戶或者后端的某個操作事件的運行情況,可以使用后端語言如PHP將操作結(jié)果記錄到日志文件中,方便測試和查找問題。尤其是這些在后端運行的而前端不能直接看到運行結(jié)果的,那么就可以用日志文件記錄下來,如果你經(jīng)常跟一些接口開發(fā)如支付寶接口、微信卡券接口打交道的話,日志記錄就必不可少了。
我們講的PHP記錄日志,就是將日志信息寫入到一個日志文件中,區(qū)別于內(nèi)存日志。寫入日志的流程是:打開日志文件(如果不存在則新創(chuàng)建),然后將日志內(nèi)容追加到日志文件的后面,最后關(guān)閉日志文件。
本文中,我們將日志內(nèi)容以json個格式保存,方便必要時直接讀取。
PHP寫日志文件
PHP寫日志文件需要打開、寫入和關(guān)閉文件等操作,PHP有fopen(),()和()三個函數(shù)與之對應(yīng),而另一個函數(shù)()它也能字符串寫入文件,其實這個函數(shù)實現(xiàn)了依次調(diào)用 fopen(),() 以及 ()。所以我們使用()非常簡潔。值得注意的是,往文件后面追加內(nèi)容時需要帶上參數(shù):。
實際運行中,我們有可能會遇到日志文件超大的情況,所以我們設(shè)置一個最大值,當日志文件大小超過這個最大值時,將此日志文件備份好,然后重新生成一個新的日志文件來記錄新的日志內(nèi)容。
在寫日志前,我們將日志內(nèi)容進行json格式化日志文件太大無法打開,所以需要將內(nèi)容轉(zhuǎn)化成JSON格式,然后寫入文件。當然你也可以不用json,或者換作別的工具程序(如日志分析工具)可以閱讀的格式。總之,我們寫入的內(nèi)容是方便必要時可以方便讀取。
($,$msg){
$res = array();
$res['msg'] = $msg;
$res[''] = date("Y-m-d H:i:s",time());
//如果日志文件超過了指定大小則備份日志文件
if(($) && (abs(($)) > )){
$ = ($).'/'.time().'-'.($);
($, $);
}
//如果是新建的日志文件,去掉內(nèi)容中的第一個字符逗號
if(($) && abs(($))>0){
$ = ",".($res);
}else{
$ = ($res);
}
//往日志文件內(nèi)容后面追加日志內(nèi)容
($, $, );
}
PHP讀日志文件
必要時日志文件太大無法打開,我們會讀取日志內(nèi)容進行分析,同樣我們使用PHP的()函數(shù),直接將內(nèi)容讀取,并且轉(zhuǎn)換成json格式,方便調(diào)用。
($){
if(($)){
$ = ($);
$json = ('['.$.']',true);
}else{
$json = '{"msg":"The file does not exist."}';
}
$json;
}
日志寫入和讀取類
寫入和讀取日志的功能我們經(jīng)常要用到,所以我將寫入和讀取功能整理成類,方便調(diào)用。
使用方法:
php">$filename?=?"logs/log_".date("Ymd",time()).".txt";?
$msg?=?'寫入了日志';?
$Log?=?new?Log();?//實例化?
$Log->writeLog($filename,$msg);?//寫入日志?
$loglist?=?$Log->readLog($filename);?//讀取日志