您好,欢迎访问一九零五行业门户网

PHP记录和读取JSON格式日志文件

json格式的数据我们用到比较多但是日志形式存储用到不多,不过我们这里有一个关于php记录和读取json格式日志文件例子,下面来看看。
我们有时需要记录用户或者后端的某个操作事件的运行情况,可以使用后端语言如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;
    }
日志写入和读取类
写入和读取日志的功能我们经常要用到,所以我将写入和读取功能整理成类,方便调用。
$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); //读取日志
其它类似信息

推荐信息