《PHP學習:PHP記錄和讀取JSON格式日志文件》要點:
本文介紹了PHP學習:PHP記錄和讀取JSON格式日志文件,希望對您有用。如果有疑問,可以聯(lián)系我們。
我們有時需要記錄用戶或者后端的某個操作事件的運行情況,可以使用后端語言如PHP將操作結果記錄到日志文件中,方便測試和查找問題.尤其是這些在后端運行的而前端不能直接看到運行結果的,那么就可以用日志文件記錄下來,如果你經(jīng)常跟一些接口開發(fā)如支付寶接口、微信卡券接口打交道的話,日志記錄就必不可少了.?PHP應用
我們講的PHP記錄日志,就是將日志信息寫入到一個日志文件中,區(qū)別于內存日志.寫入日志的流程是:打開日志文件(如果不存在則新創(chuàng)建),然后將日志內容追加到日志文件的后面,最后關閉日志文件.
PHP應用
本文中,我們將日志內容以json個格式保存,方便必要時直接讀取.
PHP應用
PHP寫日志文件
PHP寫日志文件需要打開、寫入和關閉文件等操作,PHP有fopen(),fwrite()和fclose()三個函數(shù)與之對應,而另一個函數(shù)file_put_contents()它也能字符串寫入文件,其實這個函數(shù)實現(xiàn)了依次調用 fopen(),fwrite() 以及 fclose().所以我們使用file_put_contents()非常簡潔.值得注意的是,往文件后面追加內容時需要帶上參數(shù):FILE_APPEND.
PHP應用
實際運行中,我們有可能會遇到日志文件超大的情況,所以我們設置一個最大值,當日志文件大小超過這個最大值時,將此日志文件備份好,然后重新生成一個新的日志文件來記錄新的日志內容.
PHP應用
在寫日志前,我們將日志內容進行json格式化,所以需要將內容轉化成JSON格式,然后寫入文件.當然你也可以不用json,或者換作別的工具程序(如日志分析工具)可以閱讀的格式.總之,我們寫入的內容是方便必要時可以方便讀取.
PHP應用
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()函數(shù),直接將內容讀取,并且轉換成json格式,方便調用.
PHP應用
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)常要用到,所以我將寫入和讀取功能整理成類,方便調用.
PHP應用
<?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; } } ?>
使用方法:
PHP應用
$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).rarPHP應用
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持維易PHP.PHP應用
轉載請注明本頁網(wǎng)址:
http://www.snjht.com/jiaocheng/5885.html