Nodejs 日誌websocket實時輸出

2021-08-30 17:53:57 字數 1899 閱讀 2975

有這樣乙個需求,想要通過websocket檢視某些日誌檔案的輸出(新的檔案,或者是新新增的內容,可以按行輸出),並且需要實時的,可採用系統的tail並結合spawn命令進行。

package.json

}

安裝

npm install
index.js

let fs = require('fs');

let spawn = require('child_process').spawn;

let watch = require('watch');

let uuid = require('uuid/v4');

const koa = require('koa'),

route = require('koa-route'),

websockify = require('koa-websocket');

let dataformat = require('./format.js');

const logpath = './logdir';

const port = 3001;

let wsclients = new map();

var tail = null;

let fun = function () catch (e)

}if (fs.existssync(`$/$`)) /$`).filter(name => ).map(function (file) /$/$`

});tail = spawn("tail", ["-f"].concat(filenames));

tail.stdout.on("data", function (data) catch (e)

}});

} else

};let precreatetime = 0;

watch.watchtree(logpath, function (f, curr, prev) else if (prev === null)

precreatetime = new date().gettime()

} }); return next(ctx);

}); let openid = ctx.url.split("/")[3];

ctx.websocket.close();

return;

}let clientid = uuid();

wsclients.set(clientid, function (data) catch (e) }})

}});

ctx.websocket.on('close', function () );

ctx.websocket.on('error', function () );

ctx.websocket.on('message', function (message) else if (message === 'id')

});}));

console.log(`files online tail listener port $`);

fun();

});

假設logdir目錄結構如下

├── 20181023

│   └── 127.0.0.1

│   ├── 19_1.log

│   └── 20_2.log

使用chrome的socket client即可檢視新增檔案或修改檔案的內容

可以說,由於呼叫系統的tail命令,基本是零延遲輸出的。

前端頁面與Nodejs使用websocket通訊

不要用瀏覽去直接去訪問websocket的位址!不要用瀏覽去直接去訪問websocket的位址!不要用瀏覽去直接去訪問websocket的位址!太傻了。就是頁面和服務端有個隱藏的通訊而已。前端1 例項化乙個ws物件 var wsuri ws websocket new websocket wsuri...

wireshark如何抓取WebSocket資料報

websocket目前在web端使用廣泛,可以使用websocket來傳輸資料,解決了web端無法跟伺服器維持高效的長鏈結的問題。什麼是websocket呢?websocket是一種瀏覽器與伺服器進行全雙工通訊的應用層協議。它基於 tcp 傳輸協議,並復用 http 的握手通道,可以在瀏覽器裡使用,...

nodejs之日誌管理

不管是什麼專案,日誌一直是乙個重要組成部分,它可以隨時供你檢視重要資料資訊,在nodejs中檢視實時日誌可以用pm2 logs檢視,如果使用者比較多怎麼辦了?如何將正常日誌和錯誤日誌分開?如何對每天的日誌歸檔?下面我們一起來看下。使用log4js建立日誌檔案,新建logs目錄,在目錄下新建chees...