国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 語(yǔ)言 > PHP > 正文

PHP記錄和讀取JSON格式日志文件

2024-05-04 23:47:41
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

我們有時(shí)需要記錄用戶或者后端的某個(gè)操作事件的運(yùn)行情況,可以使用后端語(yǔ)言如PHP將操作結(jié)果記錄到日志文件中,方便測(cè)試和查找問(wèn)題。尤其是這些在后端運(yùn)行的而前端不能直接看到運(yùn)行結(jié)果的,那么就可以用日志文件記錄下來(lái),如果你經(jīng)常跟一些接口開(kāi)發(fā)如支付寶接口、微信卡券接口打交道的話,日志記錄就必不可少了。 

我們講的PHP記錄日志,就是將日志信息寫(xiě)入到一個(gè)日志文件中,區(qū)別于內(nèi)存日志。寫(xiě)入日志的流程是:打開(kāi)日志文件(如果不存在則新創(chuàng)建),然后將日志內(nèi)容追加到日志文件的后面,最后關(guān)閉日志文件。

本文中,我們將日志內(nèi)容以json個(gè)格式保存,方便必要時(shí)直接讀取。

PHP寫(xiě)日志文件
PHP寫(xiě)日志文件需要打開(kāi)、寫(xiě)入和關(guān)閉文件等操作,PHP有fopen(),fwrite()和fclose()三個(gè)函數(shù)與之對(duì)應(yīng),而另一個(gè)函數(shù)file_put_contents()它也能字符串寫(xiě)入文件,其實(shí)這個(gè)函數(shù)實(shí)現(xiàn)了依次調(diào)用 fopen(),fwrite() 以及 fclose()。所以我們使用file_put_contents()非常簡(jiǎn)潔。值得注意的是,往文件后面追加內(nèi)容時(shí)需要帶上參數(shù):FILE_APPEND。

實(shí)際運(yùn)行中,我們有可能會(huì)遇到日志文件超大的情況,所以我們?cè)O(shè)置一個(gè)最大值,當(dāng)日志文件大小超過(guò)這個(gè)最大值時(shí),將此日志文件備份好,然后重新生成一個(gè)新的日志文件來(lái)記錄新的日志內(nèi)容。

在寫(xiě)日志前,我們將日志內(nèi)容進(jìn)行json格式化,所以需要將內(nèi)容轉(zhuǎn)化成JSON格式,然后寫(xiě)入文件。當(dāng)然你也可以不用json,或者換作別的工具程序(如日志分析工具)可以閱讀的格式??傊?,我們寫(xiě)入的內(nèi)容是方便必要時(shí)可以方便讀取。

 function writeLog($filename,$msg){  $res = array();  $res['msg'] = $msg;  $res['logtime'] = date("Y-m-d H:i:s",time());   //如果日志文件超過(guò)了指定大小則備份日志文件  if(file_exists($filename) && (abs(filesize($filename)) > 1024000)){   $newfilename = dirname($filename).'/'.time().'-'.basename($filename);   rename($filename, $newfilename);  }   //如果是新建的日志文件,去掉內(nèi)容中的第一個(gè)字符逗號(hào)  if(file_exists($filename) && abs(filesize($filename))>0){   $content = ",".json_encode($res);  }else{   $content = json_encode($res);  }   //往日志文件內(nèi)容后面追加日志內(nèi)容  file_put_contents($filename, $content, FILE_APPEND);  } 

PHP讀日志文件
必要時(shí),我們會(huì)讀取日志內(nèi)容進(jìn)行分析,同樣我們使用PHP的file_get_contents()函數(shù),直接將內(nèi)容讀取,并且轉(zhuǎn)換成json格式,方便調(diào)用。

 function readLog($filename){  if(file_exists($filename)){   $content = file_get_contents($filename);   $json = json_decode('['.$content.']',true);  }else{   $json = '{"msg":"The file does not exist."}';  }  return $json;  } 

日志寫(xiě)入和讀取類(lèi)
寫(xiě)入和讀取日志的功能我們經(jīng)常要用到,所以我將寫(xiě)入和讀取功能整理成類(lèi),方便調(diào)用。

<?php /*  * 日志類(lèi)  * 每天生成一個(gè)日志文件,當(dāng)文件超過(guò)指定大小則備份日志文件并重新生成新的日志文件 */ class Log {   private $maxsize = 1024000; //最大文件大小1M   //寫(xiě)入日志  public function writeLog($filename,$msg){  $res = array();  $res['msg'] = $msg;  $res['logtime'] = date("Y-m-d H:i:s",time());   //如果日志文件超過(guò)了指定大小則備份日志文件  if(file_exists($filename) && (abs(filesize($filename)) > $this->maxsize)){   $newfilename = dirname($filename).'/'.time().'-'.basename($filename);   rename($filename, $newfilename);  }   //如果是新建的日志文件,去掉內(nèi)容中的第一個(gè)字符逗號(hào)  if(file_exists($filename) && abs(filesize($filename))>0){   $content = ",".json_encode($res);  }else{   $content = json_encode($res);  }   //往日志文件內(nèi)容后面追加日志內(nèi)容  file_put_contents($filename, $content, FILE_APPEND);  }    //讀取日志  public function readLog($filename){  if(file_exists($filename)){   $content = file_get_contents($filename);   $json = json_decode('['.$content.']',true);  }else{   $json = '{"msg":"The file does not exist."}';  }  return $json;  } }  ?> 

使用方法:

$filename = "logs/log_".date("Ymd",time()).".txt"; $msg = '寫(xiě)入了日志'; $Log = new Log(); //實(shí)例化 $Log->writeLog($filename,$msg); //寫(xiě)入日志 $loglist = $Log->readLog($filename); //讀取日志 

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持VeVb武林網(wǎng)。

 


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到PHP教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 北宁市| 太康县| 灌云县| 丹东市| 宾川县| 施秉县| 临洮县| 奉贤区| 淅川县| 射洪县| 江永县| 汉沽区| 青阳县| 乳山市| 理塘县| 延安市| 深泽县| 隆安县| 吉首市| 阿鲁科尔沁旗| 天柱县| 会理县| 涞水县| 万载县| 拜城县| 旬邑县| 武功县| 大同县| 深圳市| 东安县| 广汉市| 儋州市| 合川市| 永年县| 荔波县| 江阴市| 义乌市| 南木林县| 麻江县| 永寿县| 东光县|