温馨提示×

CentOS中Node.js日志管理方法

小樊
52
2025-10-03 03:40:11
栏目: 编程语言

CentOS中Node.js日志管理方法

一、选择合适的日志库

日志库是Node.js日志管理的基础,CentOS环境下常用以下库:

  • Winston:功能全面、支持多种传输方式(文件、控制台、数据库等),是当前最流行的选择,适合需要灵活配置的场景。
  • Pino:轻量级、高性能(比Winston快3倍以上),适合高负载应用,但功能相对基础。
  • Bunyan:输出结构化JSON日志,方便后续用ELK等工具分析,适合需要日志结构化的场景。
  • Log4js:提供灵活的日志级别控制、文件轮转等功能,适合传统项目。

二、使用PM2进行进程与日志管理

PM2是Node.js进程管理工具,内置日志管理功能,操作简便:

  1. 安装PM2:全局安装npm install pm2 -g
  2. 启动应用并记录日志pm2 start app.js --name my-node-app--name指定应用名称)。
  3. 查看日志
    • 查看所有应用日志:pm2 logs
    • 查看特定应用日志:pm2 logs my-node-app
    • 实时查看日志:pm2 logs --lines 1000(显示最近1000行)。
  4. 日志轮转配置:通过ecosystem.config.js文件自定义:
    module.exports = {
      apps: [{
        name: 'my-node-app',
        script: 'app.js',
        out_file: '/var/log/nodejs/my-app-out.log', // 标准输出路径
        error_file: '/var/log/nodejs/my-app-err.log', // 错误输出路径
        log_date_format: 'YYYY-MM-DD HH:mm Z', // 日志时间格式
        log_rotation: {
          period: '1d', // 每天轮转
          rotateAfterSize: '10M', // 文件超过10MB轮转
          keepFiles: 7 // 保留7天日志
        }
      }]
    };
    
    启动时加载配置:pm2 start ecosystem.config.js

三、利用logrotate工具管理日志轮转

logrotate是Linux系统自带的日志轮转工具,可自动切割、压缩、删除旧日志:

  1. 安装logrotatesudo yum install logrotate -y
  2. 创建配置文件:在/etc/logrotate.d/目录下创建nodejs-app文件,内容如下:
    /var/log/nodejs/*.log {
      daily                # 每天轮转
      rotate 7             # 保留7天日志
      compress             # 压缩旧日志(.gz格式)
      delaycompress        # 延迟压缩(避免当天日志被压缩)
      missingok            # 日志文件不存在时不报错
      notifempty           # 日志为空时不轮转
      create 0640 root adm # 创建新日志文件并设置权限
    }
    
  3. 测试配置sudo logrotate -f /etc/logrotate.d/nodejs-app(强制立即执行)。

四、集中式日志管理(可选)

对于分布式系统或需要集中分析的场景,可将日志发送到集中式平台:

  • ELK Stack(Elasticsearch+Logstash+Kibana)
    • Logstash收集日志,Elasticsearch存储并索引,Kibana提供可视化界面。
    • 配置Winston使用winston-elasticsearch传输器,将日志直接发送到Elasticsearch。
  • Fluentd:轻量级日志收集器,支持多种输入/输出插件,可将日志发送到Elasticsearch、S3等。
  • Splunk:商业工具,提供强大的日志搜索、分析和告警功能,适合企业级场景。

五、日志级别管理

合理设置日志级别可提高日志可用性:

  • DEBUG:调试信息(开发环境使用,记录详细流程);
  • INFO:常规信息(如应用启动、请求处理);
  • WARN:警告信息(如磁盘空间不足,不影响运行但需关注);
  • ERROR:错误信息(如数据库连接失败,影响部分功能);
  • FATAL:致命错误(如应用崩溃,需立即处理)。 通过日志库的level参数设置,例如Winston:level: process.env.NODE_ENV === 'production' ? 'info' : 'debug'(生产环境只记录INFO及以上级别)。

0