如何在Ubuntu中利用Node.js日志进行故障排查
导读:如何在Ubuntu中利用Node.js日志进行故障排查 1. 定位Node.js应用日志位置 Node.js应用的日志通常存储在以下位置,需根据项目配置确认: 默认路径:应用主目录下的logs文件夹(如logs/app.log、logs/...
如何在Ubuntu中利用Node.js日志进行故障排查
1. 定位Node.js应用日志位置
Node.js应用的日志通常存储在以下位置,需根据项目配置确认:
- 默认路径:应用主目录下的
logs文件夹(如logs/app.log、logs/error.log); - 配置文件指定:检查项目配置文件(如
config.json、settings.js),查看transports(Winston)或appenders(Log4js)中的filename字段; - 控制台重定向:若启动时使用
node app.js > app.log 2> & 1 &,日志会保存在当前目录的app.log中。
2. 使用进程管理器查看实时日志(推荐)
若通过pm2管理Node.js应用(生产环境常用),可通过以下命令实时查看日志:
pm2 logs # 查看所有应用的实时日志
pm2 logs <
app_name>
# 查看指定应用的实时日志
pm2 logs --lines 1000 # 显示最近1000行日志(避免日志过长)
pm2 logs --follow # 持续跟踪新日志(类似tail -f)
pm2会自动收集应用的标准输出(stdout)和错误输出(stderr),无需手动重定向,适合长期运行的服务。
3. 查看系统日志关联信息
若应用日志未捕获到关键错误(如进程崩溃),可查看Ubuntu系统日志,获取更多上下文:
- 通用系统日志:
sudo tail -f /var/log/syslog # 实时查看系统日志(包含Node.js进程的启动/停止信息) - Systemd服务日志:若应用以systemd服务运行(如
your-node-service.service),使用以下命令查看服务相关日志:替换sudo journalctl -u your-node-service.service -f # 实时查看指定服务的日志 sudo journalctl -u your-node-service.service --since "2025-11-06 10:00:00" # 按时间筛选日志your-node-service.service为实际服务名称(可通过systemctl list-units --type=service查看)。
4. 利用日志库的结构化日志分析
使用Winston、Log4js等日志库时,可通过日志级别和结构化格式快速定位问题:
- 设置日志级别:根据环境调整日志详细程度(开发环境用
debug,生产环境用error),例如Winston配置:const winston = require('winston'); const logger = winston.createLogger({ level: process.env.LOG_LEVEL || 'info', // 通过环境变量动态设置 format: winston.format.combine( winston.format.timestamp(), winston.format.json() // 结构化日志(便于后续分析) ), transports: [ new winston.transports.File({ filename: 'error.log', level: 'error' } ), // 错误日志单独存储 new winston.transports.File({ filename: 'combined.log' } ), // 所有日志合并 new winston.transports.Console() // 控制台输出(开发环境方便调试) ] } ); - 分析关键日志:
- 用
grep筛选错误日志:grep '"level": "error"' combined.log; - 筛选HTTP请求错误(若使用
morgan记录):grep ' 4[0-9]{ 2} ' access.log(4xx错误)、grep ' 5[0-9]{ 2} ' access.log(5xx错误)。
- 用
5. 调试工具辅助深入排查
若日志无法定位问题(如内存泄漏、异步逻辑错误),可使用以下工具:
- Node.js内置调试器:启动应用时添加
--inspect-brk参数,然后在Chrome浏览器访问chrome://inspect,连接至调试端口,设置断点逐步排查:node --inspect-brk app.js - 性能分析工具:使用
clinic.js(Node.js官方工具集)分析CPU、内存占用,生成火焰图定位性能瓶颈:npx clinic doctor -- node app.js # 分析整体性能 npx clinic bubbleprof -- node app.js # 生成火焰图
6. 日志轮转防止磁盘空间耗尽
生产环境中,日志文件会不断增长,需通过日志轮转限制文件大小和数量:
- Winston内置轮转:使用
winston-daily-rotate-file插件,每天生成一个新日志文件:const winston = require('winston'); require('winston-daily-rotate-file'); const transport = new winston.transports.DailyRotateFile({ filename: 'application-%DATE%.log', datePattern: 'YYYY-MM-DD', maxSize: '20m', // 单个文件最大20MB maxFiles: '30d' // 保留30天日志 } ); const logger = winston.createLogger({ transports: [transport] } ); - 系统级工具:使用
logrotate配置日志轮转(适用于非Winston日志),编辑/etc/logrotate.d/nodejs文件:该配置表示每天轮转日志,保留30天,压缩旧日志,且不重启应用。/path/to/your/app.log { daily rotate 30 compress missingok notifempty copytruncate # 避免重启应用 }
通过以上步骤,可系统性地利用Node.js日志排查Ubuntu中的应用故障,从实时监控到深度分析,覆盖常见问题的解决路径。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何在Ubuntu中利用Node.js日志进行故障排查
本文地址: https://pptw.com/jishu/743715.html
