首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在WEB中递增地显示JSON数据而不重复解析和显示

如何在WEB中递增地显示JSON数据而不重复解析和显示
EN

Stack Overflow用户
提问于 2013-01-18 15:49:22
回答 1查看 245关注 0票数 0

我有一个日志文件,它由一个实时运行的脚本记录,现在我将从日志中监控脚本的状态,所以我使用JavaScript更新WEB/HTML,还编写了一个CGI脚本来将日志和输出事件状态解析为JSON以供JavaScript读取。JS脚本定期(例如,每2秒)调用CGI来解析日志,并调用getJSON读取事件状态,然后更新WEB。

例如:在T(秒)时,日志文件记录如下:

事件1开始..。

做第一件事..。

事件1通过..。

活动1结束..。

在T+2(第二个)时,日志文件记录如下:

事件1开始..。

做第一件事..。

事件1通过..。

活动1结束..。

事件2开始..。

做第二件事..。

事件2失败..。

活动2结束..。

时间T(秒)处的CGI可以输出:

{“事件”:[“事件1",”传递“]}

在某个URI上,JS的getJSON将读取该URI

同时,T+2(第二)可以输出:

{“事件”:[“事件1”、“传递”、“事件2”、“失败”]}

因此,在这里,我实现的CGI脚本将每2秒解析整个日志,这可能在日志很大时消耗大量的系统资源,并对已经完成的事件进行重复操作。

任何人都知道如何通过输出而不是整个日志递增地解析日志,以及如何存储已经完成的事件的状态?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-18 16:29:33

如果不希望每次解析整个日志文件,则应尝试模仿尾部-f的行为

  • 打开日志并解析所有内容(第一次)。
  • getpos获取光标位置。
  • inode获取mtime号码和状态
  • 将光标和inode保存在单独的文件中。

当下一个电话到达时,将inode号与您保存的inode号进行比较:

  • 如果它已经改变了,那么文件就被修改了(比如在日志旋转之后)。你需要从一开始就开始阅读。
  • 如果mtime已更改,请使用setpos查找旧位置,然后继续解析。
  • 否则,一切都没有改变。

使用此解决方案,您将能够逐块解析文件。小心,当只写了一行的一部分时,有时可能会有一个边框。

编辑:@mob的评论

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14402518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档