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

日志写入和读取类
写入和读取日志的功能我们经常要用到,所以我将写入和读取功能整理成类,方便调用。

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

源码下载:http://xiazai.jb51.net/201607/yuanma/phplog(jb51.net).rar

时间: 2024-11-03 22:12:49

PHP记录和读取JSON格式日志文件的相关文章

Logstash处理json格式日志文件的三种方法

假设日志文件中的每一行记录格式为json的,如: {"Method":"JSAPI.JSTicket","Message":"JSTicket:kgt8ON7yVITDhtdwci0qeZg4L-Dj1O5WF42Nog47n_0aGF4WPJDIF2UA9MeS8GzLe6MPjyp2WlzvsL0nlvkohw","CreateTime":"2015/10/13 9:39:59",&

perl 读取json 格式的文件

使用JSON 模块中的 decode_json 函数,将json文件中的数据解码为perl 中的对象,然后进行处理 代码如下: #!/usr/bin/env perl use JSON; use Encode; my ($json) = @ARGV; my $context; open TXT, $json or die "Can't open $json!\n"; while (<TXT>) { $context .= $_; } close TXT; my $obj =

Web API删除JSON格式的文件记录

Insus.NET的系列Web Api学习文章,这篇算是计划中最后一篇了,删除JSON格式的文件记录.前一篇<Web Api其中的PUT功能演示>http://www.cnblogs.com/insus/p/4346982.html中学习了怎样更新数据.程序开发涉及到数据的,为了让用户方便管理,一般提供了查询,添加,更新以及删除功能.本篇中是针对文件中的数据进行删除. 下面Insus.NET就对此进行详尽演示.Web Api的一个type: "DELETE".在API控制中

问题:iis配置json;结果:如何配置iis支持.json格式的文件

如何配置iis支持.json格式的文件 | 浏览:1357 | 更新:2015-04-05 11:00 | 标签:软件 1 2 3 4 5 6 7 分步阅读 现在大家在制作HTM5的一些小场景,小游戏时需要用到.json来记录数据,但是我们用了json后IIS又不支持解析,也是一件非常郁闷的事情,下面为大家介绍一下.如何让IIS支持json文件解析. 工具/原料 IIS 方法/步骤 1 第一步,点击开始菜单: 2 第二步,依次选择管理工具--IIS管理,有的电脑没有直接把管理工具显示出来,请依次

Android读取JSON格式数据

Android读取JSON格式数据 1. 何为JSON? JSON,全称为JavaScript Object Notation,意为JavaScript对象表示法. JSON 是轻量级的文本数据交换格式 JSON 独立于语言 JSON 具有自我描写叙述性,更易理解 相比 XML 的不同之处: 没有结束标签 更短 读写的速度更快 使用数组 不使用保留字 JSON 使用 JavaScript 语法来描写叙述数据对象,可是 JSON 仍然独立于语言和平台.JSON 解析器和 JSON 库支持很多不同的

处理JSON格式的文件-系列Error

title: 内置数据结构-文件处理 subtitle: 处理JSON格式的文件 date: 2018-12-14 10:17:28 --- JSON的Error汇总 本文档主要记录了处理JSON文件一系列Error等. 1. json.decoder.JSONDecodeError: Expecting value: line 27290 column 3 (char 1035661) 类型错误:JSON解码错误 排错思路:1. 最大的可能就是原来的大JSON文件格式出现错误,比如原JSON正

数据库记录转换成json格式 (2011-03-13 19:48:37) (转)

http://blog.sina.com.cn/s/blog_621768f30100r6v7.html 数据库记录转换成json格式 (2011-03-13 19:48:37) 转载▼ 标签: 杂谈   <?php/1.在company数据user表中取出10条数据,保存为数组2.在将数组转化为json格式,传递给js3.用json解析器将传递过来的json字符串转化为json对象,4.用document.write输出语句打印在页面上*/ $conn = mysql_connect(“loc

hadoop用mutipleInputs实现map读取不同格式的文件

mapmap读取不同格式的文件这个问题一直就有,之前的读取方式是在map里获取文件的名称,按照名称不同分不同的方式读取,例如下面的方式 //取文件名称 InputSplit inputSplit = context.getInputSplit(); String fileName = ((FileSplit) inputSplit).getPath().toString(); if(fileName.contains("track")) { } else if(fileName.con

pyhton读取json格式的气象数据

原文关于读取pm25.in气象数据的pyhton方法,以及浅析python json的应用 以pm25.in网站数据为例. 1.方法介绍 首先感谢pm25.in提供了优质的空气污染数据,为他们的辛勤劳动点个赞.是python3.3,windows系统,读取数据的时候用到了python的json处理的4个方法,很经典常用.所谓4个方法是: a)       json.loads() 输入string,返回json. b)       json.dumps() 输入json类型的数据,返回包含jso