首页主机资讯Ubuntu中Node.js日志如何存储

Ubuntu中Node.js日志如何存储

时间2025-10-03 21:16:03发布访客分类主机资讯浏览807
导读:Ubuntu中Node.js日志存储的常见方法及路径 1. 控制台输出(开发调试默认方式) Node.js内置的console模块(console.log( 、console.error( 等)默认将日志输出到应用程序运行的控制台(终端)。...

Ubuntu中Node.js日志存储的常见方法及路径

1. 控制台输出(开发调试默认方式)

Node.js内置的console模块(console.log()console.error()等)默认将日志输出到应用程序运行的控制台(终端)。若通过SSH连接服务器,可直接查看实时日志;若将应用放到后台运行(如node app.js & ),日志会保留在当前终端会话中,但关闭会话后日志会丢失。

2. 文件日志(基础持久化方式)

通过Node.js的fs模块或第三方日志库(如winstonbunyan)将日志写入指定文件,实现持久化存储。

  • 原生fs模块:使用createWriteStream创建可写流,追加日志到文件。
    const fs = require('fs');
    
    const logFile = fs.createWriteStream('./logs/app.log', {
     flags: 'a' }
        );
         // 'a'表示追加模式
    global.console = new console.Console(logFile, logFile);
         // 重定向console输出到文件
    console.log('This log will be saved to app.log');
        
    
  • 第三方日志库(以winston为例):支持多传输方式(文件、控制台、JSON格式等),更灵活。
    const winston = require('winston');
    
    const logger = winston.createLogger({
    
      level: 'info',
      format: winston.format.json(),
      transports: [
        new winston.transports.File({
     filename: './logs/error.log', level: 'error' }
    ), // 错误日志单独存储
        new winston.transports.File({
     filename: './logs/combined.log' }
    ), // 所有日志合并
        new winston.transports.Console() // 同时输出到控制台(开发环境推荐)
      ]
    }
        );
        
    logger.info('Server started on port 3000');
        
    
    上述配置会将错误日志写入./logs/error.log,所有日志写入./logs/combined.log

3. 系统日志(集成系统日志服务)

通过syslog模块将Node.js日志发送到Ubuntu的系统日志服务(rsyslog),统一管理应用日志。

  • 代码配置:使用syslog模块发送日志到系统日志。
    const syslog = require('syslog');
    
    syslog.openlog('my-node-app', {
     facility: 'local0' }
        );
         // 'local0'为自定义设施(facility)
    syslog.syslog('info', 'Application started successfully');
         // 发送info级别日志
    syslog.closelog();
        
    
  • rsyslog配置:编辑/etc/rsyslog.d/50-default.conf(或新建.conf文件),添加以下内容捕获local0设施的日志:
    local0.* /var/log/my-node-app.log // 将local0设施的所有日志写入/var/log/my-node-app.log
    
    重启rsyslog服务使配置生效:
    sudo systemctl restart rsyslog
    
    日志将存储在/var/log/my-node-app.log中。

4. 第三方进程管理器(PM2,推荐生产使用)

PM2是Node.js常用的进程管理工具,可自动管理应用日志(包括标准输出、错误输出),支持日志轮转、实时查看等功能。

  • 安装与启动
    sudo npm install pm2 -g // 全局安装PM2
    pm2 start app.js --name my-app // 启动应用并命名为"my-app"
    
  • 日志查看
    pm2 logs my-app // 实时查看应用日志(包含stdout和stderr)
    pm2 logs my-app --lines 100 // 查看最近100行日志
    
  • 日志存储位置:PM2默认将日志存储在用户主目录的.pm2/logs/文件夹下,文件名为< app-name> -out.log(标准输出)和< app-name> -err.log(错误输出)。例如:
    ~/.pm2/logs/my-app-out.log
    ~/.pm2/logs/my-app-err.log
    
  • 日志轮转:PM2内置日志轮转功能,可通过pm2 set pm2:logrotate:max_size 10M设置单个日志文件最大大小(如10MB),超过后会自动压缩并创建新文件。

5. 日志轮转(防止磁盘空间耗尽)

当日志文件过大时,需通过日志轮转工具(如logrotate)压缩、删除旧日志,释放空间。

  • 配置logrotate:创建/etc/logrotate.d/nodejs文件,添加以下内容:
    /var/log/nodejs/*.log {
     // 匹配/var/log/nodejs目录下的所有.log文件
      daily // 每天轮转一次
      missingok // 若日志文件不存在也不报错
      rotate 7 // 保留最近7天的日志
      compress // 压缩旧日志(如.gz格式)
      notifempty // 若日志为空则不轮转
      create 0640 root adm // 创建新日志文件时设置权限和所有者
    }
        
    
    该配置会自动管理/var/log/nodejs/目录下的日志文件,保留7天内的压缩日志。

6. 集中式日志管理(ELK Stack,生产高级需求)

对于需要集中管理、搜索、分析日志的生产环境,可使用ELK Stack(Elasticsearch + Logstash + Kibana):

  • 配置步骤
    1. 安装ELK组件:在Ubuntu上安装Elasticsearch、Logstash、Kibana。
    2. 配置Logstash接收Node.js日志:编辑Logstash的input配置,监听Node.js应用的日志文件(如/var/log/myapp.log)。
    3. Node.js应用发送日志到Logstash:使用winston-logstash等库将日志发送到Logstash。
      const winston = require('winston');
          
      const winstonLogstash = require('winston-logstash');
      
      const logger = winston.createLogger({
      
        transports: [
          new winstonLogstash({
      
            port: 5000, // Logstash监听的端口
            host: 'localhost' // Logstash服务器地址
          }
      )
        ]
      }
          );
          
      
    4. 通过Kibana可视化日志:启动Kibana后,在浏览器中访问http://localhost:5601,配置索引模式即可搜索、分析日志。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Ubuntu中Node.js日志如何存储
本文地址: https://pptw.com/jishu/719120.html
Node.js日志文件在Ubuntu哪 Debian Apache如何优化日志

游客 回复需填写必要信息