溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

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

發(fā)布時間:2021-08-31 14:03:00 來源:億速云 閱讀:204 作者:小新 欄目:開發(fā)技術(shù)

小編給大家分享一下PHP如何記錄和讀取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); //讀取日志

以上是“PHP如何記錄和讀取JSON格式日志文件”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI