PHP記錄和讀取JSON格式記錄檔_php技巧

來源:互聯網
上載者:User

我們有時需要記錄使用者或者後端的某個操作事件的運行情況,可以使用後端語言如PHP將操作結果記錄到記錄檔中,方便測試和尋找問題。尤其是這些在後端啟動並執行而前端不能直接看到運行結果的,那麼就可以用記錄檔記錄下來,如果你經常跟一些介面開發如支付寶介面、微信卡券介面打交道的話,日誌記錄就必不可少了。 

我們講的PHP記錄日誌,就是將日誌資訊寫入到一個記錄檔中,區別於記憶體日誌。寫入日誌的流程是:開啟記錄檔(如果不存在則新建立),然後將日誌內容追加到記錄檔的後面,最後關閉記錄檔。

本文中,我們將日誌內容以json個格式儲存,方便必要時直接讀取。

PHP寫記錄檔
PHP寫記錄檔需要開啟、寫入和關閉檔案等操作,PHP有fopen(),fwrite()和fclose()三個函數與之對應,而另一個函數file_put_contents()它也能字串寫入檔案,其實這個函數實現了依次調用 fopen(),fwrite() 以及 fclose()。所以我們使用file_put_contents()非常簡潔。值得注意的是,往檔案後面追加內容時需要帶上參數:FILE_APPEND。

實際運行中,我們有可能會遇到記錄檔超大的情況,所以我們設定一個最大值,當記錄檔大小超過這個最大值時,將此記錄檔備份好,然後重建一個新的記錄檔來記錄新的日誌內容。

在寫日誌前,我們將日誌內容進行json格式化,所以需要將內容轉化成JSON格式,然後寫入檔案。當然你也可以不用json,或者換作別的工具程式(如日誌分析工具)可以閱讀的格式。總之,我們寫入的內容是方便必要時可以方便讀取。

 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);  }   //如果是建立的記錄檔,去掉內容中的第一個字元逗號  if(file_exists($filename) && abs(filesize($filename))>0){   $content = ",".json_encode($res);  }else{   $content = json_encode($res);  }   //往記錄檔內容後面追加日誌內容  file_put_contents($filename, $content, FILE_APPEND);  } 

PHP讀記錄檔
必要時,我們會讀取日誌內容進行分析,同樣我們使用PHP的file_get_contents()函數,直接將內容讀取,並且轉換成json格式,方便調用。

 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;  } 

日誌寫入和讀取類
寫入和讀取日誌的功能我們經常要用到,所以我將寫入和讀取功能整理成類,方便調用。

<?php /*  * 日誌類  * 每天產生一個記錄檔,當檔案超過指定大小則備份記錄檔並重建新的記錄檔 */ 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);  }   //如果是建立的記錄檔,去掉內容中的第一個字元逗號  if(file_exists($filename) && abs(filesize($filename))>0){   $content = ",".json_encode($res);  }else{   $content = json_encode($res);  }   //往記錄檔內容後面追加日誌內容  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); //讀取日誌 

源碼下載:http://xiazai.jb51.net/201607/yuanma/phplog(jb51.net).rar

以上就是本文的全部內容,希望對大家的學習有所協助,也希望大家多多支援雲棲社區。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.