最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

Nodejs监听日志文件的变化的过程解析

来源:动视网 责编:小采 时间:2020-11-27 21:52:48
文档

Nodejs监听日志文件的变化的过程解析

Nodejs监听日志文件的变化的过程解析:最近有在做日志文件的分析,其中有一个需求:A服务器项目需要用Nodejs监听日志文件的变化,当项目产生了新的日志信息,将新的部分通过socket传输到B服务器项目。socket暂时不做分析。 这个需求很简单,通过分析我们开始撸码吧。 在撸码的过程中还能巩固所学N
推荐度:
导读Nodejs监听日志文件的变化的过程解析:最近有在做日志文件的分析,其中有一个需求:A服务器项目需要用Nodejs监听日志文件的变化,当项目产生了新的日志信息,将新的部分通过socket传输到B服务器项目。socket暂时不做分析。 这个需求很简单,通过分析我们开始撸码吧。 在撸码的过程中还能巩固所学N


文件系统标志

这个不需要司机,记住常见的即可,需要的时候查找。

当 flag 选项采用字符串时,可用以下标志:

'a' - 打开文件用于追加。如果文件不存在,则创建该文件。

'ax' - 与 'a' 相似,但如果路径已存在则失败。

'a+' - 打开文件用于读取和追加。如果文件不存在,则创建该文件。

'ax+' - 与 'a+' 相似,但如果路径已存在则失败。

'as' - 以同步模式打开文件用于追加。如果文件不存在,则创建该文件。

'as+' - 以同步模式打开文件用于读取和追加。如果文件不存在,则创建该文件。

'r' - 打开文件用于读取。如果文件不存在,则出现异常。

'r+' - 打开文件用于读取和写入。如果文件不存在,则出现异常。

'rs+' - 以同步模式打开文件用于读取和写入。指示操作系统绕过本地的文件系统缓存。

这对于在 NFS 挂载上打开文件时非常有用,因为它允许跳过可能过时的本地缓存。 它对 I/O 性能有非常实际的影响,因此除非需要,否则不建议使用此标志。

这不会将 fs.open() 或 fsPromises.open() 转换为同步的阻塞调用。 如果需要同步的操作,则应使用 fs.openSync() 之类的。

'w' - 打开文件用于写入。如果文件不存在则创建文件,如果文件已存在则截断文件。

'wx' - 与 'w' 相似,但如果路径已存在则失败。

'w+' - 打开文件用于读取和写入。如果文件不存在则创建文件,如果文件已存在则截断文件。

'wx+' - 与 'w+' 相似,但如果路径已存在则失败。

fs.Stats 类

fs.Stats 对象提供有关文件的信息。

Stats {
 dev: 2114,
 ino: 480969,
 mode: 33188,
 nlink: 1,
 uid: 85,
 gid: 100,
 rdev: 0,
 size: 527,
 blksize: 4096,
 blocks: 8,
 atimeMs: 13182051000.1,
 mtimeMs: 13182051000.1,
 ctimeMs: 13182051000.1,
 birthtimeMs: 13182051000.1,
 atime: Mon, 10 Oct 2011 23:24:11 GMT,
mtime: Mon, 10 Oct 2011 23:24:11 GMT,
  ctime: Mon, 10 Oct 2011 23:24:11 GMT,
  birthtime: Mon, 10 Oct 2011 23:24:11 GMT }

 开始监听日志文件

前提,在app.js中调用watchFile方法,将需要监听的文件路径传入该方法中。

function watchFile(filename) {
 console.log('Log monitoring...');
 // Open the file for reading and appending
 fs.open(filename, 'a+', function (err, fd) {
 if (err) {
 throw err;
 }
 var buffer;
 fs.watchFile(filename, {
 persistent: true,
 interval: 1000
 }, (curr, prev) => {
 // Compare the time before and after
 if (curr.mtime > prev.mtime) {
 // console.log(`The current latest revision time is: ${curr.mtime}`);
 // console.log(`The latest modification time is: ${prev.mtime}`);

 // Changes in the contents of documents
 buffer = new Buffer(curr.size - prev.size);
 // (curr.size - prev.size) this is the newly added length of the log file
 readFile(fd, buffer, (curr.size - prev.size), prev.size);
 }
 });
 });

}

读取新增内容

function readFile(fd, buffer, length, position) {
 // read file
 fs.read(fd, buffer, 0, length, position, function (err, bytesRead, buffer) {
 if (err) {
 log.error(err);
 }
 console.log('Additional Contents', buffer.toString());
 });
}

额外功能:读取历史内容

function fetchHistoryLogs(filename) {
 const rl = readLine.createInterface({
 input: fs.createReadStream(filename, {
 enconding: 'utf8'
 }),
 output: null,
 terminal: false
 });

 rl.on('line', (line) => {
 if (line) {
 logsArr.push(line.toString());
 }
 }).on('close', () => {
 for (var i = 0; i < logsArr.length; i++) {
 // Print the data for each row
 console.log(`Original data: \n ${logsArr[i]}`);
 }
 });
}

总结

以上所述是小编给大家介绍的Nodejs监听日志文件的变化的过程解析,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

文档

Nodejs监听日志文件的变化的过程解析

Nodejs监听日志文件的变化的过程解析:最近有在做日志文件的分析,其中有一个需求:A服务器项目需要用Nodejs监听日志文件的变化,当项目产生了新的日志信息,将新的部分通过socket传输到B服务器项目。socket暂时不做分析。 这个需求很简单,通过分析我们开始撸码吧。 在撸码的过程中还能巩固所学N
推荐度:
标签: 过程 日志 解析
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top