

文件系统标志
这个不需要司机,记住常见的即可,需要的时候查找。
当 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监听日志文件的变化的过程解析,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!
