日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

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

 好亂非常亂 2016-09-25

我們講的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)容進行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)容進行分析,同樣我們使用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)用。

/*
 * 日志類
 * 每天生成一個日志文件,當(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); //讀取日志

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多