当前位置: 首页 > news >正文

【前端定位线上问题的多种方案(不依赖 Sentry)】

前端定位线上问题的多种方案(不依赖 Sentry) 🛠️


一、构建时注入调试信息 🔧

1. 注入版本信息与 Git 提交哈希

Webpack 配置

// webpack.config.js
const webpack = require('webpack');
const gitRevision = require('child_process').execSync('git rev-parse --short HEAD').toString().trim();module.exports = {plugins: [new webpack.DefinePlugin({__VERSION__: JSON.stringify(`v1.0.0-${gitRevision}`)})]
};

代码中使用

console.log('当前版本:', __VERSION__);
// 输出:当前版本:v1.0.0-3a5b7d9e

优势

  • 精准定位代码版本,结合 Git 历史快速回溯问题
  • 无需第三方工具,纯前端实现

2. 生成 Source Map 并选择性部署

Webpack 生产配置

// webpack.config.js
module.exports = {devtool: 'hidden-source-map', // 生成 Source Map 但不暴露给浏览器output: {sourceMapFilename: '[file].map[query]'}
};

调试流程

  1. 构建时生成 .map 文件,但不上传至 CDN
  2. 报错时通过行号/列号(如 main.js:123:45
  3. 本地使用 source-map 库解析错误位置:
    npx source-map analyze main.js.map --line 123 --column 45
    

优势

  • 安全:不暴露源码到生产环境
  • 精准:还原压缩代码到源码位置

二、浏览器端主动捕获与上报 🌐

1. 全局错误监听

基础代码

window.addEventListener('error', (e) => {const errorInfo = {msg: e.message,file: e.filename,line: e.lineno,col: e.colno,stack: e.error?.stack,version: __VERSION__ // 构建时注入的版本};// 上报到自有APIfetch('/api/log-error', {method: 'POST',body: JSON.stringify(errorInfo)});
});

增强方案(Promise 错误)

window.addEventListener('unhandledrejection', (e) => {console.error('Unhandled Rejection:', e.reason);
});

2. Console 日志重定向

捕获所有 console.log

const originalConsoleLog = console.log;
console.log = (...args) => {originalConsoleLog(...args); // 保持原功能sendToServer('log', args); // 自定义上报
};

三、动态调试模式开关 🔌

1. URL 参数控制调试模式

代码示例

const urlParams = new URLSearchParams(location.search);
const debugMode = urlParams.has('debug');if (debugMode) {localStorage.setItem('debug', 'true'); // 持久化调试状态console.log('调试模式已开启');
}// 根据调试模式加载不同资源
if (debugMode) {import('./src/dev-tools.ts'); // 加载调试工具
}

安全措施

  • 后端校验参数权限(如特定IP或Token)
  • 生产环境默认隐藏调试入口

2. 环境变量区分构建模式

Vite 配置

// vite.config.js
export default defineConfig(({ mode }) => ({define: {__DEBUG__: mode === 'development' // 开发模式下启用调试}
}));

代码中使用

if (__DEBUG__) {console.log('当前为调试模式,敏感操作已禁用');
}

四、本地 Source Map 调试方案 🔍

1. 浏览器直接关联本地源码

步骤

  1. 构建时生成 source-map
  2. 在 Chrome DevTools 中配置:
    • 打开 Sources 面板 → Overrides
    • 映射网络资源到本地文件系统

效果


2. VS Code 调试生产代码

配置 .vscode/launch.json

{"version": "0.2.0","configurations": [{"type": "chrome","request": "launch","name": "Debug Production","url": "http://localhost:3000?debug","webRoot": "${workspaceFolder}/src","sourceMaps": true,"sourceMapPathOverrides": {"webpack:///./*": "${webRoot}/*"}}]
}

五、方案对比与选型建议 📊
方案适用场景优点缺点
构建注入版本所有项目无第三方依赖,快速定位版本需自行实现错误收集
Source Map 解析需要精准定位生产错误安全可靠,还原源码位置需手动管理 .map 文件
全局错误捕获自有错误监控系统完全可控,数据私有需后端支持,开发成本较高
动态调试模式紧急问题排查灵活开关,不影响普通用户存在安全风险,需严格权限控制
浏览器 Overrides前端开发者本地调试直接修改生产代码,实时生效仅限本地使用,无法团队协作

六、终极总结 🎯

「构建时埋点 + 浏览器捕获 + 动态调试」三位一体

  • 通过构建工具注入版本和 Source Map,建立代码与报错的精确映射
  • 利用全局错误监听实现自主上报,摆脱对 Sentry 的依赖
  • 结合 URL 参数动态开启调试模式,安全高效排查问题

一句话价值
无需依赖 Sentry,通过前端工程化手段打造自闭环的线上问题定位体系,让每一次报错都“有迹可循、有版可查”。 🔍🚀

相关文章:

【前端定位线上问题的多种方案(不依赖 Sentry)】

前端定位线上问题的多种方案(不依赖 Sentry) 🛠️ 一、构建时注入调试信息 🔧 1. 注入版本信息与 Git 提交哈希 Webpack 配置: // webpack.config.js const webpack require(webpack); const gitRevision require(…...

怎么修改node_modules里的文件,怎么使用patch-package修改node_modules的文件,怎么修改第三方库原文件。

在开发中会遇到需要node_modules里第三方库有bug,然后需要修改node_modules文件的情况 使用patch-package包可以修改node_modules里的文件 patch-package npm 官网:patch-package - npm 安装 npm i patch-package 修改文件后 npx patch-package s…...

muduo网络库2

Muduo网络库:底层实质上为Linux的epoll pthread线程池,且依赖boost库。 muduo的网络设计核心为一个线程一个事件循环,有一个main Reactor负载accept连接,然后把连接分发到某个sub Reactor(采用轮询的方式来选择sub Reactor)&…...

什么是DrawCall?DrawCall为什么会影响游戏运行效率?如何减少DrawCall?

目录 1 什么是DrawCall? 2 DrawCall为什么会影响游戏运行效率? 3 如何减少 DrawCall?(结合性能分析工具) 1 什么是DrawCall? DrawCall(绘制调用) 是 GPU 的一个指令&#xff0c…...

LabVIEW电能质量分析软件

随着电力系统的复杂性增加,电能质量问题日益突出,传统的电能质量检测装置多采用DSP技术,不仅开发周期长、功能单一,而且在多功能集成方面存在局限性。基于LabVIEW虚拟仪器开发平台的电能质量分析软件利用FFT、STFT、WT、HHT等多种…...

【十二】Golang 映射

💢欢迎来到张胤尘的开源技术站 💥开源如江河,汇聚众志成。代码似星辰,照亮行征程。开源精神长,传承永不忘。携手共前行,未来更辉煌💥 文章目录 映射映射的定义映射初始化make 函数使用字面量 源…...

PHP商协会管理系统小程序源码

📊 商协会管理系统 💻 这是一款基于ThinkPHPUniapp框架,经过深度定制与匠心打造的商协会系统,被誉为商协会领域数字化运营管理的新锐之星。它以“智慧化会员体系、智敏化内容运营、智能化活动构建”为三大核心动力源,…...

React进阶之React核心源码解析(三)

React核心源码解析 diff多节点比较diff两轮遍历比较第一轮比较第二轮比较Update 状态更新Concurrent Modediff 多节点比较diff isArray方法比较 节点更新// 更新前 <ul><li key="0" className="before">0<li><li key=...

【无标题】网络安全公钥密码体制

第一节 网络安全 概述 一、基本概念 网络安全通信所需要的基本属性“ 机密性&#xff1b;消息完整性&#xff1b;可访问性与可用性&#xff1b;身份认证。 二、网络安全威胁 窃听&#xff1b;插入&#xff1b;假冒&#xff1b;劫持&#xff1b;拒绝服务Dos和分布式拒绝服务…...

mysql中的计算日期函数 理解、用法

三种计算日期的函数 函数用途示例DATEDIFF()计算两个日期的天数差DATEDIFF(2023-10-05, 2023-10-01) → 4TIMESTAMPDIFF()按指定单位&#xff08;年、月、小时等&#xff09;计算差TIMESTAMPDIFF(MONTH, 2023-01-01, 2023-03-01) → 2DATE_ADD()日期加法DATE_ADD(2023-10-01, …...

从零开始用react + tailwindcs + express + mongodb实现一个聊天程序(一)

项目包含5个模块 1.首页 (聊天主页) 2.注册 3.登录 4.个人资料 5.设置主题 一、配置开发环境 建立项目文件夹 mkdir chat-project cd chat-project mkdir server && mkdir webcd server npm init cd web npm create vitelatest 创建前端项目时我们选择javascrip…...

wifi5和wifi6,WiFi 2.4G、5G,五类网线和六类网线,4G和5G的区别

wifi5和wifi6的区别 是Wi-Fi 5和Wi-Fi 6的选择与路由器密切相关。路由器是创建和管理无线网络的设备,它决定了网络的类型和性能。具体来说: 路由器的标准支持:路由器可以支持不同的Wi-Fi标准,如Wi-Fi 5(802.11ac)和Wi-Fi 6(802.11ax)。支持Wi-Fi 6的路由器能够提供更高…...

Docker基础-常见命令

docker images -查看所有的本地镜像。 docker pull -把远端镜像拉取到本地。 docker rmi -删除镜像。 docker push -推到镜像仓库。 docker run -创建并运行容器&#xff08;自动化&#xff0c;如果发现镜像不存在会先去拉取&#xff0c; 拉取完了以后再去自动创建容器&am…...

从零开始用react + tailwindcs + express + mongodb实现一个聊天程序(三) 实现注册 登录接口

1.划分文件夹 在src目录下创建controllers middleware models routes controllers 放具体的方法 signup login middleware 里面是中间件 请求的验证 models 放对象实体 routes 处理访问路径像/signup /login 等等 2. 接口开发 系统的主要 有用户认证 和 消息 2种类型…...

Android NFC功能开发指南

在 Android 平台上开发 NFC&#xff08;近场通信&#xff09;功能&#xff0c;主要涉及以下几个步骤&#xff1a; 1. 权限声明 首先&#xff0c;在 AndroidManifest.xml 文件中声明 NFC 权限&#xff1a; <uses-permission android:name"android.permission.NFC&quo…...

基于Matlab实现汽车远近光灯识别的详细步骤及代码示例

以下是一个基于Matlab实现汽车远近光灯识别的详细步骤及代码示例&#xff0c;主要通过图像处理技术来区分远光灯和近光灯。 整体思路 图像预处理&#xff1a;包括读取图像、灰度化、去噪等操作&#xff0c;以提高后续处理的准确性。边缘检测&#xff1a;找出图像中的边缘信息…...

nginx反向代理以及负载均衡(常见案例)

一、nginx反向代理 1、什么是代理服务器&#xff1f; 代理服务器&#xff0c;客户机在发送请求时&#xff0c;不会直接发送给目的主机&#xff0c;而是先发送给代理服务器&#xff0c;代理服务接受客户机请求之后&#xff0c;再向主机发出&#xff0c;并接收目的主机返回的数据…...

Spring 三级缓存机制(解决循环依赖)

文章目录 &#x1f504; 现实生活类比&#xff1a;开餐厅的过程&#x1f4a1; 结合到 Spring 三级缓存&#x1f6e0;️ Spring 解决循环依赖的步骤1️⃣ Spring 开始创建 A2️⃣ Spring 开始创建 B3️⃣ B 创建完成后&#xff0c;回过头来继续创建 A &#x1f4cc; 三级缓存的作…...

第4章 4.4 EF Core数据库迁移 Add-Migration UpDate-Database

4.4.1 数据库迁移原理 总结一下就是&#xff1a; 1. 数据库迁移命令的执行&#xff0c;其实就是生成在数据库执行的脚本代码&#xff08;两个文件&#xff1a;数字_迁移名.cs 数字_迁移名.Designer.cs&#xff09;&#xff0c;用于对数据库进行定义和修饰。 2. 数据库迁移…...

web安全——web应用程序技术

文章目录 一、HTTP1.1 HTTP方法1.2 HTTP消息头1.3 cookie1.4 状态码 二、web功能2.1 服务器端功能2.2 客户端功能——同源策略 三、编码方案3.1 URL编码3.2 Unicode编码3.3 HTML编码3.4 Base64编码 一、HTTP HTTP&#xff08;超文本传输协议&#xff09;是web应用程序使用的通…...

阿里云PolarDB在CentOS 7上的性能调优实战:从THP配置到内核参数优化

阿里云PolarDB在CentOS 7上的性能调优实战&#xff1a;从THP配置到内核参数优化 当数据库规模达到TB级别时&#xff0c;每个百分点的性能提升都可能意味着数万元的成本节约。作为阿里云自主研发的云原生数据库&#xff0c;PolarDB凭借存储计算分离架构和共享存储池设计&#x…...

Midscene.js:零代码跨平台UI自动化的终极指南 - 让AI成为你的智能操作员

Midscene.js&#xff1a;零代码跨平台UI自动化的终极指南 - 让AI成为你的智能操作员 【免费下载链接】midscene AI-powered, vision-driven UI automation for every platform. 项目地址: https://gitcode.com/GitHub_Trending/mid/midscene 你是否厌倦了每天重复点击、…...

DeepMosaics与同类工具对比:为什么它是最佳选择

DeepMosaics与同类工具对比&#xff1a;为什么它是最佳选择 【免费下载链接】DeepMosaics Automatically remove the mosaics in images and videos, or add mosaics to them. 项目地址: https://gitcode.com/gh_mirrors/de/DeepMosaics DeepMosaics是一款功能强大的开源…...

Google搜索高级语法全解析:从基础到进阶的完整指南

Google搜索高级语法全解析&#xff1a;从基础到进阶的完整指南 在信息爆炸的时代&#xff0c;如何快速准确地找到所需内容已成为一项关键技能。Google作为全球最受欢迎的搜索引擎&#xff0c;其强大的搜索功能远不止简单的关键词匹配。掌握Google高级搜索语法&#xff0c;就像…...

RMBG-2.0惊艳效果实测:复杂边缘分割精度超SOTA,附10组对比图

RMBG-2.0惊艳效果实测&#xff1a;复杂边缘分割精度超SOTA&#xff0c;附10组对比图 1. 这不是又一个“能用就行”的抠图工具 你有没有试过给一张带飘逸发丝的证件照换背景&#xff1f;或者想把电商主图里那个半透明玻璃杯干净利落地抠出来&#xff1f;传统抠图工具要么得花半…...

Wan2.2-I2V-A14B新手指南:无需代码,通过ComfyUI界面轻松操作

Wan2.2-I2V-A14B新手指南&#xff1a;无需代码&#xff0c;通过ComfyUI界面轻松操作 1. 认识Wan2.2视频生成模型 Wan2.2-I2V-A14B是一款专为创意工作者设计的视频生成工具&#xff0c;它能将静态图片转化为动态视频。这个50亿参数的轻量级模型特别适合快速内容创作&#xff0…...

HY-MT1.5翻译模型部署教程:快速搭建个人翻译API服务

HY-MT1.5翻译模型部署教程&#xff1a;快速搭建个人翻译API服务 1. 模型简介与核心优势 1.1 模型架构概览 HY-MT1.5是腾讯开源的双版本翻译模型系列&#xff0c;包含两个不同规模的模型&#xff1a; HY-MT1.5-1.8B&#xff1a;轻量级模型&#xff0c;18亿参数&#xff0c;专…...

Ostrakon-VL-8B赋能Web前端:实现图片智能ALT文本自动生成

Ostrakon-VL-8B赋能Web前端&#xff1a;实现图片智能ALT文本自动生成 1. 引言 你有没有想过&#xff0c;网站上的图片对于看不见屏幕的人来说&#xff0c;意味着什么&#xff1f;对于搜索引擎来说&#xff0c;又意味着什么&#xff1f;答案就在那个小小的 alt 属性里。它不仅…...

Graphormer开源镜像保姆级教程:3.7GB纯Transformer模型GPU快速部署

Graphormer开源镜像保姆级教程&#xff1a;3.7GB纯Transformer模型GPU快速部署 1. 为什么选择Graphormer&#xff1f; Graphormer是微软研究院开发的基于纯Transformer架构的图神经网络模型&#xff0c;专门用于分子属性预测任务。与传统的图神经网络(GNN)相比&#xff0c;它…...

# 发散创新:用Python与Stable Diffusion打造AI绘画自动化

发散创新&#xff1a;用Python与Stable Diffusion打造AI绘画自动化流水线 在人工智能迅猛发展的今天&#xff0c;AI绘画已从实验性工具演变为生产力引擎。本文将带你深入实践一个完整的 基于Python Stable Diffusion 的图像生成自动化系统&#xff0c;不仅实现一键式文生图、风…...