外链论坛

 找回密码
 立即注册
搜索
查看: 11|回复: 1

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

[复制链接]

3046

主题

2万

回帖

9909万

积分

论坛元老

Rank: 8Rank: 8

积分
99098928
发表于 2024-10-4 19:57:25 | 显示全部楼层 |阅读模式

咱们有时需要记录用户后端的某个操作事件的运行状况能够运用后端语言如PHP将操作结果记录到日志文件中,方便测试和查询问题。尤其是这些在后端运行的而前端不可直接看到运行结果的,那样能够用日志文件记录下来,倘若你经常跟有些接口研发如支付宝接口、微X卡券接口打交道的话,日志记录就必不可少了。

咱们讲的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);

        }

        //倘若是新建的日志文件,去掉内容中的第1个字符逗号

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

        }

        //倘若是新建的日志文件,去掉内容中的第1个字符逗号

        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); //读取日志
回复

使用道具 举报

3046

主题

2万

回帖

9909万

积分

论坛元老

Rank: 8Rank: 8

积分
99098928
 楼主| 发表于 2024-10-16 12:19:11 | 显示全部楼层
楼主继续加油啊!外链论坛加油!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站点统计|Archiver|手机版|小黑屋|外链论坛 ( 非经营性网站 )|网站地图

GMT+8, 2024-11-9 02:43 , Processed in 0.071048 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.