温馨提示×

Ubuntu Node.js日志中如何查找关键信息

小樊
38
2025-12-17 21:55:04
栏目: 编程语言

Ubuntu 下 Node.js 日志关键信息定位与排查

一 定位日志来源

  • 应用日志:优先在项目目录的 logs/ 或配置文件(如 config.json)中指定的路径,常见文件名有 app.log、error.log、combined.log
  • 进程管理日志:使用 PM2 时,日志统一由 PM2 管理,可用 pm2 logs 查看。
  • 系统日志:若通过 systemd 托管服务,用 journalctl -u <service_name> 查看;通用系统日志在 /var/log/syslog
  • 快速确认路径与实时查看:
    • 查看应用日志:ls -l logs;tail -f logs/app.log
    • 查看服务日志:sudo journalctl -u <service_name> -f
    • 查看 PM2 日志:pm2 logs <app_name> --follow

二 快速筛选关键信息的命令

  • 按级别筛选:grep -i “error|warn|fatal” app.log;统计数量:grep -i “error” app.log | wc -l
  • 按时间窗口:awk ‘/2025-12-17 10:00:00/,/2025-12-17 11:00:00/’ app.log
  • 实时过滤关键字:tail -f app.log | grep --line-buffered “timeout\|ECONNREFUSED”
  • 仅看错误并附带上下文:grep -n -A5 -B5 “error” app.log
  • 在 systemd 日志中筛选:sudo journalctl -u <service_name> --since “10 minutes ago” | grep -i “error”
  • 在 PM2 日志中筛选:pm2 logs <app_name> --lines 1000 | grep WARN

三 常见关键错误与定位路径

  • 端口被占用 EADDRINUSE:ss -ltnp | grep <端口> 或 lsof -i :<端口>;释放:kill -9
  • 模块未找到 Module not found:npm install <模块名>;检查 node_modulespackage.json 一致性
  • 语法错误 SyntaxError:检查对应文件的行号与语法;本地复现后修正
  • 未处理的 Promise 拒绝:为所有 Promise 加 .catch() 或使用 try/catch;临时兜底:process.on(‘unhandledRejection’, …)
  • 监听器泄漏 MaxListenersExceededWarning:排查重复 on(‘event’),必要时 myEmitter.setMaxListeners(20) 并 removeListener
  • 内存不足 JavaScript heap out of memory:短期提升 –max-old-space-size=4096;长期用 clinic/heapdump 定位泄漏

四 提升后续排查效率的实践

  • 使用结构化日志与合适级别:生产以 error/warn 为主,开发可开启 debug;推荐 JSON 格式,便于检索与聚合(如 winston、pino)。
  • 配置日志轮转:避免单文件过大,使用 logrotatewinston-daily-rotate-file 按日/大小切分并压缩归档。
  • 集中化与可视化:接入 ELK/Graylog/Splunk,用 Kibana 建立索引与可视化面板,支持快速检索与告警。
  • 性能与开销控制:高并发下优先 pino 等高性能库,采用异步写入,避免同步日志阻塞主线程。

0