要在JavaScript中监控Linux日志,有几种可行的方法,以下是几种常见方案:
const fs = require('fs');
const tail = require('tail').Tail;
// 指定要监控的日志文件路径
const logFile = '/var/log/syslog'; // 或其他日志文件如/var/log/auth.log
// 使用tail库实时监控文件
const logTail = new tail(logFile);
logTail.on("line", function(data) {
console.log("新日志:", data);
// 这里可以添加你的处理逻辑,如发送到Web界面等
});
logTail.on("error", function(error) {
console.error('监控出错:', error);
});
const { NodeSSH } = require('node-ssh');
const ssh = new NodeSSH();
ssh.connect({
host: 'your-linux-server',
username: 'your-username',
privateKey: '/path/to/private/key'
}).then(() => {
// 执行tail命令实时获取日志
ssh.execCommand('tail -f /var/log/syslog', {
onStdout: (chunk) => {
console.log('新日志:', chunk.toString('utf8'));
},
onStderr: (chunk) => {
console.error('错误:', chunk.toString('utf8'));
}
});
});
在Linux服务器上创建简单的Node.js服务:
const express = require('express');
const fs = require('fs');
const app = express();
const port = 3000;
app.get('/logs', (req, res) => {
// 读取日志文件内容
fs.readFile('/var/log/syslog', 'utf8', (err, data) => {
if (err) {
return res.status(500).send('无法读取日志文件');
}
res.send(data);
});
});
app.listen(port, () => {
console.log(`日志服务运行在 http://localhost:${port}`);
});
然后在客户端JavaScript中调用:
// 定期获取日志
setInterval(() => {
fetch('http://your-server:3000/logs')
.then(response => response.text())
.then(logs => {
console.log('最新日志:', logs);
});
}, 5000); // 每5秒获取一次
服务器端:
const express = require('express');
const WebSocket = require('ws');
const { exec } = require('child_process');
const app = express();
const wss = new WebSocket.Server({ port: 8080 });
wss.on('connection', (ws) => {
// 启动tail命令监控日志
const tailProcess = exec('tail -f /var/log/syslog');
tailProcess.stdout.on('data', (data) => {
ws.send(data.toString());
});
ws.on('close', () => {
tailProcess.kill();
});
});
app.listen(3000);
客户端:
const ws = new WebSocket('ws://your-server:8080');
ws.onmessage = (event) => {
console.log('收到新日志:', event.data);
};
以上方法可以根据你的具体需求进行调整和组合使用。