nohup node log2.js > log_output.log 2>&1 &
const fs = require('fs');
const request = require('request');
const schedule = require('node-schedule');
const moment = require("moment-timezone");
const logfile = 'logfile.log';
const keywords = ['Exception', 'Error', 'Warning']; // 根据需要添加或删除关键词
const dateRegex = /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}/;
const maxContentLength = 1900;
// 设置默认时区为 'Asia/Shanghai'
moment.tz.setDefault('Asia/Shanghai');
const displayLogEntry = (logEntry, logContent) => {
const logLines = [logEntry];
let i = logContent.indexOf(logEntry);
while (i > 0 && !logContent[i - 1].match(dateRegex)) {
logLines.unshift(logContent[--i]);
}
if (keywords.some(keyword => logLines.some(line => line.includes(keyword)))) {
return logLines.reverse().join('\n');
}
return null;
};
const sendLogsToAPI = (logs) => {
const resData = {
"msgtype": "text",
"text": {
"content": "Exception监控测试:抓取到五分钟内的异常日志:\n\n" + logs,
}
};
request({
url: "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=17e3b586-eca2ffa84130",
method: "POST",
headers: {
"content-type": "application/json",
},
body: JSON.stringify(resData)
}, function (error, response, body) {
console.log('提示成功!');
});
};
const processLogs = () => {
const currentTime = moment();
const currentTimestamp = currentTime.valueOf();
const logContent = fs.readFileSync(logfile, 'utf-8').split('\n').reverse();
const filteredLogEntries = [];
let stopReading = false;
for (let i = 0; i < logContent.length; i++) {
const line = logContent[i];
const matchedDate = line.match(dateRegex);
if (matchedDate) {
const logTimestamp = moment(matchedDate[0]);
if (currentTimestamp - logTimestamp.valueOf() <= 5 * 60 * 1000) {
const logEntry = displayLogEntry(line, logContent);
if (logEntry) {
filteredLogEntries.push(logEntry);
}
} else {
// 如果超出指定的时间范围,则停止读取
stopReading = true;
break;
}
}
}
if (filteredLogEntries.length > 0) {
const combinedLogs = filteredLogEntries.join('\n\n');
let truncatedLogs = combinedLogs;
if (combinedLogs.length > maxContentLength) {
truncatedLogs = combinedLogs.substring(0, maxContentLength);
console.log('警告:文字内容长度超过最大限制,已截断。');
}
sendLogsToAPI(truncatedLogs);
}
console.log('日志文件读取完成。');
if (stopReading) {
console.log('已超出时间范围,停止读取日志。');
}
};
// 每分钟执行一次
schedule.scheduleJob('*/5 * * * *', () => {
processLogs();
console.log('scheduleCronstyle:' + moment().format());
});
console.log('Start successfully');
dockerfile部署:
FROM node:latest WORKDIR /home/node # 安装请求库和Vim RUN apt-get update && \ npm install request && \ npm install node-schedule && \ npm install moment-timezone && \ apt-get install -y vim ENTRYPOINT ["node", "log.js"]
浙公网安备 33010602011771号