利用Node.js进行日志监控系统资源,可以通过以下几个步骤实现:
console模块Node.js提供了内置的console模块,可以用来输出日志信息。你可以使用console.log、console.error等方法来记录不同级别的日志。
const fs = require('fs');
const path = require('path');
const logStream = fs.createWriteStream(path.join(__dirname, 'app.log'), { flags: 'a' });
function log(message) {
const timestamp = new Date().toISOString();
logStream.write(`${timestamp} - ${message}\n`);
}
log('Application started');
为了更方便地管理日志,可以使用一些流行的第三方日志库,如winston或pino。
winstonwinston是一个功能强大的日志库,支持多种传输方式(如文件、控制台、HTTP等)。
const winston = require('winston');
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(),
transports: [
new winston.transports.File({ filename: 'error.log', level: 'error' }),
new winston.transports.File({ filename: 'combined.log' })
]
});
logger.info('Application started');
pinopino是一个高性能的日志库,适合需要高吞吐量的应用。
const pino = require('pino');
const logger = pino({ level: 'info' });
logger.info('Application started');
Node.js本身并没有直接监控系统资源的功能,但你可以结合其他模块来实现这一功能。
os模块os模块提供了获取系统资源信息的方法,如CPU使用率、内存使用情况等。
const os = require('os');
function getSystemInfo() {
const cpuUsage = os.loadavg();
const totalMemory = os.totalmem();
const freeMemory = os.freemem();
const usedMemory = totalMemory - freeMemory;
return {
cpuUsage,
totalMemory,
usedMemory
};
}
setInterval(() => {
const info = getSystemInfo();
logger.info(`CPU Usage: ${info.cpuUsage}, Memory Usage: ${info.usedMemory}`);
}, 5000);
pidusage模块pidusage模块可以获取Node.js进程的资源使用情况。
const pidusage = require('pidusage');
const pid = process.pid;
setInterval(() => {
pidusage(pid, (err, stats) => {
if (err) {
logger.error(err);
return;
}
logger.info(`CPU Usage: ${stats.cpu}, Memory Usage: ${stats.memory}`);
});
}, 5000);
将上述代码集成到你的Node.js应用中,确保在应用启动时初始化日志记录,并定期监控系统资源。
const fs = require('fs');
const path = require('path');
const winston = require('winston');
const os = require('os');
const pidusage = require('pidusage');
// 初始化日志记录
const logStream = fs.createWriteStream(path.join(__dirname, 'app.log'), { flags: 'a' });
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(),
transports: [
new winston.transports.File({ filename: 'error.log', level: 'error' }),
new winston.transports.File({ filename: 'combined.log' })
]
});
// 获取系统资源信息
function getSystemInfo() {
const cpuUsage = os.loadavg();
const totalMemory = os.totalmem();
const freeMemory = os.freemem();
const usedMemory = totalMemory - freeMemory;
return {
cpuUsage,
totalMemory,
usedMemory
};
}
// 监控系统资源
const pid = process.pid;
setInterval(() => {
pidusage(pid, (err, stats) => {
if (err) {
logger.error(err);
return;
}
const info = getSystemInfo();
logger.info(`CPU Usage: ${stats.cpu}, Memory Usage: ${info.usedMemory}`);
});
}, 5000);
// 应用启动日志
logger.info('Application started');
通过上述步骤,你可以利用Node.js进行日志监控系统资源,并确保应用的稳定运行。