【发布时间】:2020-04-18 14:52:39
【问题描述】:
我正在尝试从 syslog-ng 读取更新的 JSON 文件。目前,日志软件 syslog 被设置为不断地附加一个 JSON 文件,其中包含我想要的数据的日志。我在我的网络攻击地图上仅显示数据 30 秒,直到不再需要它为止。我可以读取文件并解析我需要的内容,但是随着时间的推移,有没有办法只读取和解析文件中最近添加的内容?
示例代码:
//Assume JSON output = {attack source, attack destination, attack type}
//Required modules
var JSONStream = require('JSONStream')
var fs = require('fs');
//Creates readable stream for JSON file parsing
var stream = fs.createReadStream( 'output.json', 'utf8'),
parser = JSONStream.parse(['source', 'dest', 'type']);
//Send read data to parser function
stream.pipe(parser);
//Intake data from parser function
parser.on('data', function (obj) {
//Do something with the object
console.log(obj);
});
我正在使用 JSONStream 以避免将整个日志文件读入内存,JSONstream 应该仍然能够解析我想要的位,但是有没有一种方法可以在原始读取完成后才读取更改?
【问题讨论】:
-
如果 json 真的很大,那么你就不能拆分它,要逐个解析,你必须等到完整文件加载到任何流或缓冲区
-
嗯,这可能就是我要找的东西:npmjs.com/package/fs-watch-stream
-
@DickensAS 你能详细解释一下吗?我认为流式传输 JSON 会使得不需要将整个文件读取到内存中。
-
@DickensAS 那么将整个文件读入内存会更好吗?我不会遇到内存问题吗?
-
内容是什么样的,它是一个完整的 json 以花括号开头并以花括号结尾吗?或者它是一个新行分隔的多 json 日志文件?
标签: javascript json parsing syslog-ng