首页 > php教程 > PHP源码 > 正文

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

php中文网
发布: 2016-07-06 13:34:20
原创
1361人浏览过

JSON格式的数据我们用到比较多但是日志形式存储用到不多,不过我们这里有一个关于PHP记录和读取JSON格式日志文件例子,下面来看看。

<script>ec(2);</script>

我们有时需要记录用户或者后端的某个操作事件的运行情况,可以使用后端语言如php将操作结果记录到日志文件中,方便测试和查找问题。尤其是这些在后端运行的而前端不能直接看到运行结果的,那么就可以用日志文件记录下来,如果你经常跟一些接口开发如支付宝接口、微信卡券接口打交道的话,日志记录就必不可少了。


我们讲的PHP记录日志,就是将日志信息写入到一个日志文件中,区别于内存日志。写入日志的流程是:打开日志文件(如果不存在则新创建),然后将日志内容追加到日志文件的后面,最后关闭日志文件。
本文中,我们将日志内容以json个格式保存,方便必要时直接读取。

PHP写日志文件

PHP写日志文件需要打开、写入和关闭文件等操作,PHP有fopen(),fwrite()和fclose()三个函数与之对应,而另一个函数file_put_contents()它也能字符串写入文件,其实这个函数实现了依次调用 fopen(),fwrite() 以及 fclose()。所以我们使用file_put_contents()非常简洁。值得注意的是,往文件后面追加内容时需要带上参数:FILE_APPEND。
实际运行中,我们有可能会遇到日志文件超大的情况,所以我们设置一个最大值,当日志文件大小超过这个最大值时,将此日志文件备份好,然后重新生成一个新的日志文件来记录新的日志内容。

在写日志前,我们将日志内容进行json格式化,所以需要将内容转化成JSON格式,然后写入文件。当然你也可以不用json,或者换作别的工具程序(如日志分析工具)可以阅读的格式。总之,我们写入的内容是方便必要时可以方便读取。

Find JSON Path Online
Find JSON Path Online

Easily find JSON paths within JSON objects using our intuitive Json Path Finder

Find JSON Path Online 30
查看详情 Find JSON Path Online

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

日志写入和读取类

写入和读取日志的功能我们经常要用到,所以我将写入和读取功能整理成类,方便调用。
/*
 * 日志类
 * 每天生成一个日志文件,当文件超过指定大小则备份日志文件并重新生成新的日志文件
*/
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); //读取日志

相关标签:
PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号