vue中axios全局错误日志上报通过响应拦截器统一捕获网络错误、http异常、超时等,结构化采集url、状态码、环境信息等字段,采用fetch keepalive或image beacon异步非阻塞上报,并支持分级过滤、环境隔离与采样控制。

Vue 项目中用 Axios 实现全局错误日志自动上报,核心在于拦截请求失败响应,并统一处理、采集关键信息后发送到日志服务(如 Sentry、自建接口或 ELK)。不需要每个接口手动 try-catch,靠 Axios 拦截器 + 错误分类 + 上报策略就能做到。
配置 Axios 响应拦截器捕获所有失败请求
在 Axios 实例的 response interceptor 中判断 status、error 类型和响应结构,把网络错误、HTTP 状态码异常(如 400/500)、超时、取消等都归入可上报范围:
- 检查
error.response是否存在:有则为 HTTP 错误(如 401、500),可取status、data、headers - 检查
error.request是否存在但无响应:大概率是网络中断、跨域拒绝、DNS 失败等 - 检查
error.code === 'ECONNABORTED':请求超时 - 检查
error.message包含 “Network Error” 或 “timeout”:兜底识别
构造标准化错误日志数据
上报前拼装结构化字段,便于后端分类和告警。至少包含:
- timestamp:Date.now(),精确到毫秒
- url:请求完整地址(含 query)
- method:GET/POST 等
- status:HTTP 状态码(无则填 0 或 -1)
- message:原始 error.message 或自定义描述(如 “请求超时:/api/user/list”)
- stack:error.stack(客户端 JS 错误才有,Axios 错误一般为空,可跳过)
- ua / platform / screen:浏览器环境信息,辅助定位问题设备
- user_id / session_id(如有登录态):关联用户行为
异步非阻塞上报,避免影响主流程
错误上报不能阻塞页面逻辑,推荐用 fetch + keepalive 或 Image beacon 方式发送:
- 用
fetch(url, { method: 'POST', body: JSON.stringify(log), keepalive: true }),keepalive 确保页面卸载时仍能发出去 - 或退化方案:创建
new Image().src = logUrl + '?' + encodeQuery(log),兼容性更好但只支持 GET 和简单参数 - 加个简易防抖:同一 URL + method 在 1 秒内重复失败,只上报第一次,防止刷屏
区分错误级别,按需上报
不是所有错误都要立刻上报。可设置阈值或白名单:
- 401/403 不上报(属业务流程,非异常)
- 400 带特定 error_code(如 “VALIDATE_FAIL”)可忽略
- 500/502/503 必报;超时、网络错误默认上报
- 开发环境只 console.error,不发请求;生产环境才触发上报
- 加个开关变量(如
window.__REPORT_ERROR__ = true),方便灰度或临时关闭
不复杂但容易忽略的是环境隔离和采样控制——上线初期建议 100% 上报,稳定后按 10% 随机采样,避免日志服务被冲垮。上报接口本身也要有容错:失败时不重试,避免循环错误。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











