PHP记录和读取JSON格式日志文件
发布:smiling 来源: PHP粉丝网 添加日期:2018-09-16 12:34:01 浏览: 评论:0
我们有时需要记录用户或者后端的某个操作事件的运行情况,可以使用后端语言如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);
- } //phpfensi.com
- //往日志文件内容后面追加日志内容
- 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;
- }
日志写入和读取类
写入和读取日志的功能我们经常要用到,所以我将写入和读取功能整理成类,方便调用。
- <?php
- /*
- * 日志类
- * 每天生成一个日志文件,当文件超过指定大小则备份日志文件并重新生成新的日志文件
- */
- 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); //读取日志
Tags: 格式 文件 日志
- 上一篇:PHP记住密码功能实现例子
- 下一篇:PHP 堆与堆排序的详解
相关文章
- ·PHP json_encode输出josn格式并解决中文乱码(2014-07-29)
- ·PHP中DOMDocument生成与解析XML格式数据(2014-08-20)
- ·PHP格式化输出json数据例子整理(2014-09-21)
- ·php怎么写注释?PHP代码添加注释的几种格式(2018-07-20)
- ·php基于dom实现的图书xml格式数据示例(2018-07-26)
- ·php基于dom实现读取图书xml格式数据的方法(2018-07-31)
- ·完美解决php 导出excle的.csv格式的数据时乱码问题(2018-08-02)
- ·如何在PHP中转换日期格式(2019-12-30)
- ·php实例分享之html转为rtf格式(2021-01-31)
- ·php实现的返回数据格式化类实例(2021-04-14)
- ·PHP实现格式化文件数据大小显示的方法(2021-05-05)
- ·php使用wordwrap格式化文本段落的方法(2021-05-16)
- ·php实现格式化多行文本为Js可用格式(2021-05-22)
- ·深入浅析php json 格式控制(2021-07-01)
- ·PHP格式化MYSQL返回float类型的方法(2021-07-24)
- ·PHP实现浏览器格式化显示XML的方法示例(2021-11-05)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)