温馨提示×

如何在Ubuntu中分析js错误日志

小樊
37
2026-01-02 12:56:33
栏目: 编程语言

在 Ubuntu 中分析 JS 错误日志的实用流程


一 明确日志来源与定位日志文件

  • 前端 JS:优先查看浏览器开发者工具 ConsoleNetwork(快捷键 F12Ctrl+Shift+I),关注报错信息、堆栈与响应状态码。
  • Node.js 后端:常见位置为项目目录下的 logs/ 或应用配置指定的文件;若由 systemd 托管,用 journalctl -u your-service-name 查看;若使用 PM2,用 pm2 logs 实时查看。
  • 系统层面:/var/log/(如 syslog)可能包含服务启动、崩溃与权限相关线索。
  • 不确定位置时,先查应用文档/配置;必要时用 grep -R “ERROR” /path/to/app 在项目中搜索关键字。

二 命令行快速筛选与解析

  • 实时跟踪与关键字过滤:
    • 文件日志:tail -f app.log | grep -i “error|exception|fail”
    • systemd 服务:journalctl -u your-service -f -S “10 minutes ago”
    • PM2 应用:pm2 logs your-app --lines 200 | grep -i error
  • 文本处理:
    • 提取时间与级别:awk ‘{print $1, $2, $3, $4}’ app.log
    • 清洗与抽取片段:sed -n ‘/ERROR/p’ app.log
  • JSON 日志(安装 jqsudo apt-get install jq):
    • 按错误字段筛选:jq ‘select(.level==“error”) | .message’ app.log
    • 展开堆栈:jq -r ‘.stack’ app.log
  • 进阶:将筛选、解析写成脚本并用 cron 定时运行,便于沉淀分析规则。

三 Node.js 常见错误模式与处理

  • 弃用警告(DeprecationWarning):如 Buffer() 已弃用,升级 Node.js 与依赖,按官方建议改用 Buffer.alloc()/Buffer.from()
  • 未处理的 Promise 拒绝(UnhandledPromiseRejectionWarning):为所有 Promise.catch() 或使用 try/catch;临时全局监听:
    • process.on(“unhandledRejection”, (reason) => console.error(reason));
  • 监听器泄漏(MaxListenersExceededWarning):避免重复添加监听器,必要时 emitter.setMaxListeners(n)removeListener
  • 内存不足(JavaScript heap out of memory):短期提升堆上限 node --max-old-space-size=4096 app.js;长期用 clinic/heapdump 定位泄漏并优化数据结构与缓存策略。

四 前端与 Node.js 的调试手段

  • 前端:在 Sources 面板设置断点、单步执行、观察作用域与网络响应;配合 Console 的报错与 Network 的状态码/响应体定位问题。
  • Node.js:使用 node --inspect-brk app.js,在 Chrome 访问 chrome://inspect 进行远程调试;结合日志级别与堆栈定位模块与行号。

五 监控与长期治理

  • 日志集中化:小规模可用 ELK Stack(Elasticsearch/Logstash/Kibana)Graylog 做采集、检索与可视化;大规模建议引入结构化日志与采样策略。
  • 运行监控:用 Prometheus + Grafana 采集指标并配置告警(如错误率、延迟、内存),与日志联动排查。
  • 第三方库问题:关注日志中的 错误级别、错误消息、堆栈跟踪,核对 package.jsonnpm list 的版本,查阅库文档与社区;必要时回退或升级版本。

0