Debian 环境下 JavaScript 日志常见问题与排查
一 常见错误类型与典型触发
- SyntaxError:语法不合法,如缺少闭合括号、引号不匹配、非法字符等,常见于构建产物或部署包与运行环境不一致。
- ReferenceError:访问未声明变量,如 console.log(a) 而 a 未定义。
- TypeError:对不符合预期类型的值进行操作,如 undefined.id、对 null 取属性。
- RangeError:数值越界,如 new Array(-20);或递归过深导致 Maximum call stack size exceeded。
- URIError:非法 URI 编码/解码,如错误的 encodeURI/ decodeURI 参数。
- EvalError:与 eval 使用不当相关,现代环境已较少见。
- Node.js 场景特有:如 ReferenceError: module is not defined(模块未正确安装或引用方式不当)。
二 日志定位与快速排查
- 确认运行环境:前端错误多在浏览器 Console;后端 Node.js 错误在应用日志与 stderr/stdout。
- 快速检索错误:在系统或应用日志中按错误类型关键字过滤,例如
- grep ‘SyntaxError’ /var/log/syslog
- grep ‘TypeError’ /var/log/your-app.log
- 读取堆栈信息:定位到具体 文件名:行号:列号,优先修复最近一次提交引入的问题。
- 复现与最小化:用最小代码片段复现,排除依赖与环境因素。
- 重启生效:修复后重启相关服务,例如 sudo systemctl restart apache2 或 sudo systemctl restart your-node-service。
三 高频场景与修复建议
- 前端资源加载失败(如 404/NetworkError):检查 publicPath、CDN 与反向代理配置,确认打包产物已部署到正确路径。
- 跨域问题(CORS):服务端添加正确的 Access-Control-Allow-Origin 等响应头,或在前端开发代理中配置。
- 依赖与版本不一致:确保 node_modules 与 package-lock.json 一致,必要时清理后重装(如 rm -rf node_modules && npm install)。
- 环境变量缺失:检查 .env 或进程环境变量是否加载,尤其是 NODE_ENV、PORT、密钥类变量。
- 异步与未捕获异常:为 Promise 增加 .catch,在 Node.js 使用 process.on(‘unhandledRejection’) / process.on(‘uncaughtException’) 记录并安全退出。
- 日志规范:统一使用结构化日志(如 JSON),输出 timestamp、level、msg、stack、reqId,便于检索与聚合。
- 监控与告警:接入 ELK(Elasticsearch, Logstash, Kibana) 或 Prometheus + Grafana,对 Error 级别日志与异常率设置告警。
四 实用命令与配置示例
- 查看与过滤日志:
- 实时查看系统日志:tail -f /var/log/syslog | grep --color=auto ‘Error’
- 按关键字检索应用日志:grep -n ‘TypeError’ /var/log/your-app.log
- Node.js 最小异常边界示例:
- process.on(‘unhandledRejection’, (err) => { console.error(‘Unhandled Rejection:’, err.stack || err); process.exit(1); });
- process.on(‘uncaughtException’, (err) => { console.error(‘Uncaught Exception:’, err.stack || err); process.exit(1); });
- 重启服务:sudo systemctl restart your-node-service(根据实际服务名替换)。