首页 > 语言 > JavaScript > 正文

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

2024-05-06 15:36:13
字体:
来源:转载
供稿:网友

最近有在做日志文件的分析,其中有一个需求:A服务器项目需要用Nodejs监听日志文件的变化,当项目产生了新的日志信息,将新的部分通过socket传输到B服务器项目。socket暂时不做分析。

这个需求很简单,通过分析我们开始撸码吧。 在撸码的过程中还能巩固所学Nodejs的API,何乐而不为呢?

所用的API

fs.watchFile()

语法

fs.watchFile(filename[, options], listener)

参数解析

filename <string> | <Buffer> | <URL> ——文件名options <Object> persistent <boolean> 默认值: true。——是否应该继续运行 interval <integer> 默认值: 5007。——轮询目标的频率listener <Function> current <fs.Stats> ——当前值 previous <fs.Stats> ——之前值

监视 filename 的更改。 每当访问文件时都会调用 listener 回调。

listener 有两个参数,当前的 stat 对象和之前的 stat 对象

这些 stat 对象是 fs.Stat 的实例。

要在修改文件(而不仅仅是访问)时收到通知,则需要比较 curr.mtime 和 prev.mtime。

当 fs.watchFile 操作导致 ENOENT 错误时,它将调用一次监听器,并将所有字段置零(或将日期设为 Unix 纪元)。 如果文件是在那之后创建的,则监听器会被再次调用,且带上最新的 stat 对象。 这是 v0.10 之后的功能变化。

使用 fs.watch() 比 fs.watchFile fs.unwatchFile 更高效。 应尽可能使用 fs.watch 代替 fs.watchFile 和 fs.unwatchFile。

当 fs.watchFile() 正在监视的文件消失并重新出现时,第二次回调事件(文件重新出现)返回的 previousStat 会与第一次回调事件(文件消失)返回的 previousStat 相同。

这种情况发生在:

文件被删除,然后又恢复。
文件被重命名两次,且第二次重命名回其原来的名称。

例子

fs.watchFile('message.text', (curr, prev) => { console.log(`当前的最近修改时间是: ${curr.mtime}`); console.log(`之前的最近修改时间是: ${prev.mtime}`);});

fs.open()

语法

fs.open(path[, flags[, mode]], callback)

参数解析

path <string> | <Buffer> | <URL> ——文件路径flags <string> | <number> 默认值: 'r'。——文件系统标志mode <integer> 默认值: 0o666(可读写)。——设置文件模式(权限和粘滞位),但仅限于创建文件的情况callback <Function> err <Error> ——错误 fd <integer>——文件系统流

fs.read()

语法

fs.read(fd, buffer, offset, length, position, callback)

参数解析

fd <integer> ——文件系统流buffer <Buffer> | <TypedArray> | <DataView>——数据将写入的缓冲区offset <integer>—— buffer 中开始写入的偏移量length <integer>——要读取的字节数position <integer>——从文件中开始读取的位置callback <Function> err <Error> bytesRead <integer> buffer <Buffer>            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选