亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

Nodejs監聽日志文件的變化的過程解析

2024-05-06 16:53:59
字體:
來源:轉載
供稿:網友

最近有在做日志文件的分析,其中有一個需求: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>

 

fs.createReadStream()

語法

fs.createReadStream(path[, options])

參數解析

 

path <string> | <Buffer> | <URL>——文件路徑options <string> | <Object> flags <string> 默認值: 'r'。——文件系統標志 encoding <string> 默認值: null。——字符編碼 fd <integer> 默認值: null。——文件系統流 mode <integer> 默認值: 0o666。——設置文件模式(權限和粘滯位),但僅限于創建文件的情況 autoClose <boolean> 默認值: true。——是否自動關閉文件描述符 start <integer>——文件讀取的開始位置 end <integer> 默認值: Infinity。——文件讀取的結束位置 highWaterMark <integer> 默認值: 64 * 1024。

返回: <fs.ReadStream> 參閱可讀流。

如果 autoClose 為 false,則即使出現錯誤,也不會關閉文件描述符。 應用程序負責關閉它并確保沒有文件描述符泄漏。 如果 autoClose 設為 true(默認行為),則在 'error' 或 'end' 事件時將自動關閉文件描述符。

mode 用于設置文件模式(權限和粘滯位),但僅限于創建文件的情況。

例子

讀取sample.txt文件的10個字符

fs.createReadStream('sample.txt', { start: 90, end: 99 });

readLine.createInterface

語法

readline.createInterface(options)

參數解析

options <Object>

  input <stream.Readable> 要監聽的可讀流。此選項是必需的。
  output <stream.Writable> 將逐行讀取數據寫入的可寫流。
  completer <Function> 用于 Tab 自動補全的可選函數。
  terminal <boolean> 如果 input 和 output 應該被視為 TTY,并且寫入 ANSI/VT100 轉義碼,則為 true。 默認值: 實例化時在 output 流上檢查 isTTY。
  historySize <number> 保留的最大歷史記錄行數。 要禁用歷史記錄,請將此值設置為 0。 僅當用戶或內部 output 檢查將 terminal 設置為 true 時,此選項才有意義,否則根本不會初始化歷史記錄緩存機制。 默認值: 30。
  prompt - 要使用的提示字符串。默認值: '> '。
  crlfDelay <number> 如果 /r 與 /n 之間的延遲超過 crlfDelay 毫秒,則 /r 和 /n 將被視為單獨的行尾輸入。  crlfDelay 將被強制轉換為不小于 100 的數字。 可以設置為 Infinity, 這種情況下, /r 后跟 /n 將始終被視為單個換行符(對于使用 /r/n 行分隔符的文件讀取可能是合理的)。 默認值: 100。
  removeHistoryDuplicates <boolean> 如果為 true, 則當添加到歷史列表的新輸入行與舊的輸入行重復時,將從列表中刪除舊行。 默認值: false。
  escapeCodeTimeout <number> readline 將會等待一個字符的持續時間(當以毫秒為單位讀取模糊鍵序列時,可以使用輸入讀取到目前為止形成完整的鍵序列,并且可以采取額外的輸入來完成更長的鍵序列)。 默認值: 500。

文件系統標志

這個不需要司機,記住常見的即可,需要的時候查找。

當 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: 48064969, mode: 33188, nlink: 1, uid: 85, gid: 100, rdev: 0, size: 527, blksize: 4096, blocks: 8, atimeMs: 1318289051000.1, mtimeMs: 1318289051000.1, ctimeMs: 1318289051000.1, birthtimeMs: 1318289051000.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監聽日志文件的變化的過程解析,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩有码在线观看| 国产+人+亚洲| 国产在线观看91精品一区| 欧美日韩加勒比精品一区| 97人洗澡人人免费公开视频碰碰碰| 黑人狂躁日本妞一区二区三区| 日韩av在线天堂网| 国产精品自产拍在线观看| 亚洲女人天堂av| 日韩中文字幕在线视频播放| 国内精品美女av在线播放| 欧美专区在线视频| 日韩精品免费看| 欧美性生活大片免费观看网址| 亚洲欧美中文字幕| 亚洲色图偷窥自拍| 亚洲国产精品成人一区二区| 成人综合网网址| 成人精品视频久久久久| 国产免费一区视频观看免费| 欧美精品在线免费播放| 亚洲国产婷婷香蕉久久久久久| 国产精品久久久久久影视| 久久99精品久久久久久青青91| 日本精品性网站在线观看| 97不卡在线视频| 91精品视频免费观看| 成人黄色生活片| 欧美日韩在线免费| 精品网站999www| 日韩视频在线免费| 菠萝蜜影院一区二区免费| 久久免费成人精品视频| 欧美第一黄网免费网站| 亚洲专区中文字幕| 最近2019中文免费高清视频观看www99| 欧美极品在线视频| 久久资源免费视频| 成人网页在线免费观看| 精品性高朝久久久久久久| 久久久久久久国产精品视频| 欧美国产一区二区三区| 国产成人精彩在线视频九色| 欧美老女人xx| 国产成人aa精品一区在线播放| 国产成人啪精品视频免费网| 国产91色在线| 日韩精品中文字幕在线观看| 久久精品99国产精品酒店日本| 中文字幕精品影院| 国产亚洲精品高潮| 日韩欧美在线免费观看| 日本精品久久久久影院| 92看片淫黄大片看国产片| 国模极品一区二区三区| 亚洲一区二区三区视频| 欧美精品999| 欧美激情久久久久久| 狠狠久久亚洲欧美专区| 日韩成人av网| 狠狠色香婷婷久久亚洲精品| 亚洲跨种族黑人xxx| 国产一区二区三区中文| 亚洲激情久久久| 一区二区三区四区精品| 国产视频精品xxxx| 久久久精品2019中文字幕神马| 一区二区三区www| 国产一区二区黑人欧美xxxx| 一区二区三区亚洲| 欧美国产日韩免费| 国产精品稀缺呦系列在线| 欧美最猛性xxxxx亚洲精品| 日本精品久久久久影院| 国产成人精品在线播放| 欧美大人香蕉在线| 久久五月天色综合| 日韩欧美在线视频免费观看| 91产国在线观看动作片喷水| 久久精品人人做人人爽| 欧美日韩亚洲91| 欧美裸体视频网站| 国产精品aaa| 成人欧美一区二区三区黑人孕妇| 欧美乱大交xxxxx另类电影| 亚洲视频一区二区| 日韩av免费一区| 欧美最猛性xxxxx(亚洲精品)| 国产精品一久久香蕉国产线看观看| 国语自产精品视频在线看一大j8| 国产精品96久久久久久又黄又硬| 日韩电影免费观看在线观看| 日韩中文字幕在线免费观看| 国产91精品久久久久久久| 欧美人在线观看| 91免费国产视频| 亚洲天堂成人在线视频| 亚洲人成电影在线| 欧美成人午夜激情视频| 精品久久久久久亚洲国产300| 日韩有码片在线观看| 国产成人激情小视频| 81精品国产乱码久久久久久| 久久国产精彩视频| 日韩不卡中文字幕| 亚洲男人天堂网站| 91av中文字幕| 日本最新高清不卡中文字幕| 日韩欧中文字幕| 欧美日韩精品在线视频| 欧美成人免费va影院高清| 欧美xxxx18国产| 国产精品444| 欧美精品在线免费播放| 国产精品久久久久99| 日韩成人xxxx| 91免费在线视频网站| 久久精品视频在线播放| 国产精品美女免费看| 国产区精品在线观看| 久久久久久久久久久久av| 2019中文字幕在线观看| 亚洲开心激情网| 精品欧美一区二区三区| 欧美成人精品h版在线观看| 日本一欧美一欧美一亚洲视频| 2019中文字幕全在线观看| 91av免费观看91av精品在线| 色偷偷888欧美精品久久久| 亚洲天堂色网站| 欧美精品激情在线观看| 欧美精品免费看| 国内免费久久久久久久久久久| 91网站在线看| 欧美天堂在线观看| 91久久精品国产91性色| 亚洲va国产va天堂va久久| 亚洲性生活视频| 欧美日韩综合视频网址| 国外日韩电影在线观看| 久久精品视频网站| 日本精品中文字幕| 一本一本久久a久久精品牛牛影视| 国产精品美女主播| 国产精品极品美女粉嫩高清在线| 精品成人69xx.xyz| 欧美性猛xxx| 日韩精品免费在线视频观看| 韩日精品中文字幕| 亚洲性xxxx| 精品亚洲一区二区三区| 欧美日韩激情视频| 亚洲xxxx3d| 亚洲国产高潮在线观看| 一个色综合导航| 中文字幕亚洲无线码在线一区| 日韩欧美中文字幕在线观看| 日韩在线观看免费全集电视剧网站| 欧美亚洲视频在线看网址| 国产久一一精品| 欧美性高跟鞋xxxxhd| 欧美日韩国产91| 日韩在线观看免费全集电视剧网站| 欧美日韩在线另类|