在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即可看到应用输出的实时错误信息。如需过滤,可结合grep:pm2 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的组合方案,能够覆盖常见监控需求。根据实际场景选择合适的方式,避免错误日志成为运维盲区。
