插件窝 干货文章 Linux下如何监控Node.js日志

Linux下如何监控Node.js日志

日志 使用 Winston 监控 585    来源:    2025-05-06

Linux下监控Node.js日志的方法

在Linux环境下监控Node.js应用程序日志有多种方法,以下是一些常用的解决方案:

1. 使用Node.js内置日志模块

// 使用console输出日志
console.log('Info message');
console.error('Error message');

// 或者使用更结构化的方式
const util = require('util');
const fs = require('fs');
const logFile = fs.createWriteStream('app.log', { flags: 'a' });
const logStdout = process.stdout;

console.log = function () {
  logFile.write(util.format.apply(null, arguments) + '\n');
  logStdout.write(util.format.apply(null, arguments) + '\n');
};

2. 使用专业日志库

推荐使用成熟的日志库如: - Winston - 功能强大的日志库 - Bunyan - JSON格式的日志库 - Pino - 高性能日志库

Winston示例

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' })
  ]
});

if (process.env.NODE_ENV !== 'production') {
  logger.add(new winston.transports.Console({
    format: winston.format.simple()
  }));
}

3. 使用Linux系统工具监控日志

tail命令实时查看日志

tail -f /path/to/your/nodejs/app.log

grep过滤特定日志

grep "ERROR" /path/to/your/nodejs/app.log

使用multitail工具

multitail -cS node /path/to/your/nodejs/app.log

4. 使用日志管理系统

使用logrotate管理日志文件

创建/etc/logrotate.d/nodejs-app:

/path/to/your/nodejs/app.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 0640 root root
    sharedscripts
    postrotate
        kill -USR1 `cat /var/run/nodejs-app.pid 2>/dev/null` 2>/dev/null || true
    endscript
}

使用systemd journal

如果Node.js应用作为systemd服务运行:

journalctl -u your-nodejs-service -f

5. 使用ELK Stack (Elasticsearch, Logstash, Kibana)

  1. 配置Node.js应用输出结构化日志(JSON格式)
  2. 使用Filebeat收集日志
  3. Logstash处理日志
  4. Elasticsearch存储日志
  5. Kibana可视化日志

6. 使用PM2日志管理

如果使用PM2管理Node.js进程:

# 查看所有应用日志
pm2 logs

# 查看特定应用日志
pm2 logs app-name

# 清空日志
pm2 flush

# 日志文件位置
~/.pm2/logs/

7. 使用Sentry进行错误监控

集成Sentry可以实时监控和报警错误:

const Sentry = require('@sentry/node');
Sentry.init({ dsn: 'https://yourdsn@sentry.io/yourproject' });

最佳实践建议

  1. 使用结构化日志(JSON格式)便于后续处理
  2. 区分日志级别(debug, info, warn, error)
  3. 包含请求ID等上下文信息
  4. 敏感信息不要记录在日志中
  5. 设置合理的日志轮转策略
  6. 对生产环境日志设置监控和报警

以上方法可以根据实际需求组合使用,构建完整的Node.js日志监控解决方案。