如何在Ubuntu中监控Node.js错误日志
在Ubuntu系统中,监控Node.js错误日志可通过直接查看日志文件、使用进程管理器、集成系统日志或第三方工具等方式实现,以下是具体方法:
若Node.js应用将错误日志输出到文件(如通过console.error()重定向或第三方日志库配置),可使用以下命令实时监控:
tail -f命令:实时显示日志文件新增内容,适用于简单的日志跟踪。例如,若错误日志路径为/var/log/myapp-error.log,执行tail -f /var/log/myapp-error.log,终端会持续输出最新的错误信息。multitail工具:支持同时监控多个日志文件,提供颜色高亮和分屏显示,提升多日志监控效率。安装命令:sudo apt-get install multitail;监控命令:multitail /var/log/myapp-error.log。PM2是Node.js常用的进程管理工具,可自动捕获应用错误日志并提供实时查看、轮转、重启等功能:
sudo npm install pm2 -g。pm2 start app.js --name my-app --error logs/my-app-error.log);若未指定,PM2会默认将错误日志保存到~/.pm2/logs/<app-name>-error.log。pm2 logs my-app(my-app为应用名称),即可实时查看应用的错误输出;若需过滤错误日志,可结合grep命令,如pm2 logs my-app | grep 'ERROR'。若将Node.js应用作为系统服务运行(如通过systemd创建服务),可通过journalctl命令查看系统日志中的Node.js错误信息:
/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=<your-user>
Group=<your-group>
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=my-nodejs-app
[Install]
WantedBy=multi-user.target
journalctl -u my-nodejs-app -t(-u指定服务名,-t显示日志标签),即可查看与该服务相关的所有日志(包括错误)。通过第三方日志库(如Winston、Bunyan)可定制错误日志的格式、级别和存储路径,便于后续分析:
npm install winston),配置错误日志输出到文件:const winston = require('winston');
const logger = winston.createLogger({
level: 'error', // 仅记录error及以上级别日志
format: winston.format.json(), // JSON格式便于解析
transports: [
new winston.transports.File({ filename: 'logs/error.log' }), // 错误日志文件
new winston.transports.Console() // 可选:同时输出到控制台
]
});
// 在代码中捕获错误并记录
try {
// 业务代码
} catch (error) {
logger.error('An error occurred:', error); // 记录错误堆栈
}
npm install bunyan),配置JSON格式错误日志: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等工具进行分析。
为防止错误日志文件无限增长,可使用logrotate工具自动轮替日志:
/etc/logrotate.d/下新建文件(如nodejs),内容示例:/path/to/your/nodejs/app/logs/*.log {
daily # 每天轮替
missingok # 若日志文件不存在也不报错
rotate 7 # 保留最近7天的日志
compress # 压缩旧日志(节省空间)
notifempty # 若日志为空则不轮替
create 0640 <user> <group> # 创建新日志文件并设置权限(替换为运行应用的用户和组)
}
执行sudo logrotate -f /etc/logrotate.d/nodejs可手动触发轮替。
通过以上方法,可全面监控Ubuntu中Node.js应用的错误日志,及时发现并解决问题。根据实际需求选择合适的方式(如简单监控用tail -f,生产环境用PM2+日志库+logrotate),提升运维效率。