游乐游手机版
首页/编程语言/文章详情

Ubuntu下Node.js错误日志监控方法

时间:2026-06-19 06:50
Ubuntu中监控Node js错误日志可通过直接查看日志文件、使用PM2进程管理器、借助systemd的journalctl、采用Winston或Bunyan等第三方日志库以及配置logrotate日志轮替实现。不同方法侧重各异,日常调试可用tail-f,生产环境推荐PM2结合日志库及logrotate。

在Ubuntu系统中追踪Node.js应用的错误日志,有多种成熟的方法可供选择。无论是直接查阅日志文件、利用进程管理器辅助、集成系统日志,还是借助第三方工具,都能有效实现。以下详细介绍几种常用方案。

如何在Ubuntu中监控Node.js错误日志

1. 直接查看应用程序日志文件

如果你的Node.js应用将错误日志写入文件(例如通过console.error()重定向或使用第三方日志库),实时监控非常简单:

  • tail -f命令:这是最直接的方式,能够实时显示日志文件中新增的内容。例如,若错误日志位于/var/log/myapp-error.log,执行tail -f /var/log/myapp-error.log即可持续刷新最新的错误信息。
  • multitail工具:如果需要同时监控多个文件,multitail支持多文件同时监控、颜色高亮和分屏显示。安装命令:sudo apt-get install multitail,然后运行multitail /var/log/myapp-error.log即可开始使用。

2. 使用PM2进程管理器统一管理

PM2作为Node.js生态中常用的进程管理工具,自带日志捕获、实时查看、日志轮转、重启等功能,操作十分便捷:

  • 安装:全局安装命令为sudo npm install pm2 -g
  • 启动应用并指定错误日志路径:例如pm2 start app.js --name my-app --error logs/my-app-error.log;若不指定,PM2默认将错误日志存储到~/.pm2/logs/-error.log
  • 实时查看日志:执行pm2 logs my-app即可看到应用输出的实时错误信息。如需过滤,可结合greppm2 logs my-app | grep 'ERROR'

3. 利用系统日志(journalctl)进行整合

如果Node.js应用以系统服务方式运行(例如通过systemd管理),使用journalctl可以直接查看系统日志中的错误信息:

  • 首先创建一个systemd服务文件,例如/etc/systemd/system/my-nodejs-app.service,内容大致如下:
    [Unit]
    Description=My Node.js App
    After=network.target
    
    [Service]
    ExecStart=/usr/bin/node /path/to/app.js
    Restart=always
    User=
    Group=
    StandardOutput=syslog
    StandardError=syslog
    SyslogIdentifier=my-nodejs-app
    
    [Install]
    WantedBy=multi-user.target
  • 然后通过journalctl -u my-nodejs-app -t查看该服务的所有日志(包含错误),其中-u指定服务名,-t显示日志标签。

4. 借助第三方日志库实现精细记录

采用Winston、Bunyan等日志库,可以自定义日志格式、级别和存储路径,为后续分析提供便利:

  • Winston示例:安装npm install winston,配置一个仅记录error级别日志并输出到文件的logger:
    const winston = require('winston');
    const logger = winston.createLogger({
      level: 'error',
      format: winston.format.json(),
      transports: [
        new winston.transports.File({ filename: 'logs/error.log' }),
        new winston.transports.Console() // 可选,同时输出到控制台
      ]
    });
    
    // 捕获错误时记录
    try {
      // 业务代码
    } catch (error) {
      logger.error('An error occurred:', error);
    }
  • Bunyan示例:安装npm install bunyan,配置一个输出JSON格式错误日志的logger:
    const bunyan = require('bunyan');
    const logger = bunyan.createLogger({
      name: 'my-app',
      streams: [
        { level: 'error', path: 'logs/app-error.log' }
      ]
    });
    
    logger.error('Database connection failed:', { error: err.message });

使用这些库记录的错误日志结构清晰,后续接入ELK Stack或Graylog等分析工具非常方便。

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

若不对错误日志加以控制,数月后可能占用大量磁盘空间。Linux自带的logrotate工具可以轻松解决这个问题:

  • /etc/logrotate.d/目录下新建一个配置文件(例如nodejs),内容示例如下:
    /path/to/your/nodejs/app/logs/*.log {
        daily          # 每天轮转一次
        missingok      # 日志文件不存在时不报错
        rotate 7       # 保留最近7天的日志
        compress       # 压缩旧日志
        notifempty     # 空文件不进行轮转
        create 0640    # 创建新日志文件并设置权限(替换为实际用户和组)
    }
  • 手动触发轮转:sudo logrotate -f /etc/logrotate.d/nodejs

以上几种方法各有适用场景:日常调试时使用tail -f即可满足需求;生产环境推荐PM2搭配日志库与logrotate的组合方案,能够覆盖常见监控需求。根据实际场景选择合适的方式,避免错误日志成为运维盲区。

来源:https://www.yisu.com/ask/2932975.html
上一篇用dmesg分析网络延迟的实用方法 下一篇Dmesg文件系统错误的解决方法
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
CentOS与Golang打包常见兼容性问题探讨
编程语言 · 2026-07-01

CentOS与Golang打包常见兼容性问题探讨

CentOS与Golang打包的兼容性问题集中在glibc版本不匹配、交叉编译环境变量错误、依赖库缺失及Go依赖管理不规范。可通过Docker容器编译、选择兼容Go版本、正确设置GOOS GOARCH环境变量、安装对应开发包及使用GoModules解决。

CentOS中Fortran与Python如何协同工作从入门到实战完整教程
编程语言 · 2026-07-01

CentOS中Fortran与Python如何协同工作从入门到实战完整教程

在CentOS中,Fortran与Python可通过f2py、SWIG、共享库调用或subprocess协同。f2py封装Fortran为Python模块,支持数组运算;共享库需手动对齐数据类型;系统调用适合独立计算。

CentOS中Golang打包优化方法
编程语言 · 2026-07-01

CentOS中Golang打包优化方法

在CentOS中优化Golang编译打包,可显著提升编译速度并减小二进制文件体积。关键技巧包括:设置环境变量、使用Go模块管理依赖、编译时添加-ldflags= "-s-w "去除调试信息、利用UPX工具压缩、运行strip清理符号表,以及优化cgo内C代码的编译选项。综合运用这些方法能有效优化最终程序。

在CentOS系统中cpustat与其他工具协同使用的完整方法
编程语言 · 2026-07-01

在CentOS系统中cpustat与其他工具协同使用的完整方法

cpustat作为sysstat包的CPU监控工具,可通过管道与grep等命令配合过滤数据,利用脚本自动记录带时间戳的日志,或结合图形工具查看,也可格式化输出后接入Zabbix、Grafana等Web监控系统,实现可视化与告警。

CentOS中readdir与其他Linux发行版的差异
编程语言 · 2026-07-01

CentOS中readdir与其他Linux发行版的差异

CentOS基于RHEL,与Ubuntu、Debian、Fedora在包管理器(yum dnfvsapt)、默认文件系统(XFSvsext4)等存在差异,但readdir等系统调用遵循POSIX标准,行为一致。