PHP記錄和讀取JSON格式日志文件
來源:易賢網(wǎng) 閱讀:675 次 日期:2016-08-15 15:05:25
溫馨提示:易賢網(wǎng)小編為您整理了“PHP記錄和讀取JSON格式日志文件”,方便廣大網(wǎng)友查閱!

我們有時需要記錄用戶或者后端的某個操作事件的運行情況,可以使用后端語言如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(),fwrite()和fclose()三個函數(shù)與之對應(yīng),而另一個函數(shù)file_put_contents()它也能字符串寫入文件,其實這個函數(shù)實現(xiàn)了依次調(diào)用 fopen(),fwrite() 以及 fclose()。所以我們使用file_put_contents()非常簡潔。值得注意的是,往文件后面追加內(nèi)容時需要帶上參數(shù):FILE_APPEND。

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

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

function writeLog($filename,$msg){ 

$res = array(); 

$res['msg'] = $msg; 

$res['logtime'] = date("Y-m-d H:i:s",time()); 

//如果日志文件超過了指定大小則備份日志文件 

if(file_exists($filename) && (abs(filesize($filename)) > 1024000)){ 

 $newfilename = dirname($filename).'/'.time().'-'.basename($filename); 

 rename($filename, $newfilename); 

//如果是新建的日志文件,去掉內(nèi)容中的第一個字符逗號 

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讀日志文件

必要時,我們會讀取日志內(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; 

日志寫入和讀取類

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

<?php 

/* 

 * 日志類 

 * 每天生成一個日志文件,當(dāng)文件超過指定大小則備份日志文件并重新生成新的日志文件 

*/

class Log { 

 private $maxsize = 1024000; //最大文件大小1M 

 //寫入日志 

 public function writeLog($filename,$msg){ 

 $res = array(); 

 $res['msg'] = $msg; 

 $res['logtime'] = date("Y-m-d H:i:s",time()); 

 //如果日志文件超過了指定大小則備份日志文件 

 if(file_exists($filename) && (abs(filesize($filename)) > $this->maxsize)){ 

  $newfilename = dirname($filename).'/'.time().'-'.basename($filename); 

  rename($filename, $newfilename); 

 } 

 //如果是新建的日志文件,去掉內(nèi)容中的第一個字符逗號 

 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 = '寫入了日志'; 

$Log = new Log(); //實例化 

$Log->writeLog($filename,$msg); //寫入日志 

$loglist = $Log->readLog($filename); //讀取日志 

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助

更多信息請查看網(wǎng)絡(luò)編程
易賢網(wǎng)手機(jī)網(wǎng)站地址:PHP記錄和讀取JSON格式日志文件
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 加入群交流 | 手機(jī)站點 | 投訴建議
工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65317125(9:00—18:00) 獲取招聘考試信息及咨詢關(guān)注公眾號:hfpxwx
咨詢QQ:526150442(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報警專用圖標(biāo)