利用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
。
winston
winston
是一個功能強大的日志庫,支持多種傳輸方式(如文件、控制臺、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');
pino
pino
是一個高性能的日志庫,適合需要高吞吐量的應用。
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進行日志監控系統資源,并確保應用的穩定運行。