溫馨提示×

如何利用Node.js日志監控系統資源

小樊
43
2025-09-04 15:40:09
欄目: 編程語言

利用Node.js進行日志監控系統資源,可以通過以下幾個步驟實現:

1. 使用內置的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');

2. 使用第三方日志庫

為了更方便地管理日志,可以使用一些流行的第三方日志庫,如winstonpino。

使用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');

3. 監控系統資源

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);

4. 集成到應用中

將上述代碼集成到你的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進行日志監控系統資源,并確保應用的穩定運行。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女