'use client'; import { useState } from 'react'; import { trackError } from '@/lib/analytics'; export default function TestErrorTrackingClient() { const [testResults, setTestResults] = useState([]); const addResult = (message: string) => { setTestResults((prev) => [...prev, `[${new Date().toLocaleTimeString()}] ${message}`]); }; const testJavaScriptError = () => { try { addResult('🧪 测试 1: 触发 JavaScript 运行时错误...'); throw new Error('测试错误:这是一个故意的 JavaScript 错误'); } catch (error) { const errorMessage = error instanceof Error ? error.message : String(error); trackError('javascript_error', errorMessage, false, { test_id: 'test_js_error', filename: 'test-error-page.tsx', lineno: 20, }); addResult('✅ JavaScript 错误已发送到 GA4'); } }; const testPromiseRejection = () => { addResult('🧪 测试 2: 触发 Promise 未捕获异常...'); Promise.reject(new Error('测试错误:Promise 故意拒绝')); addResult('✅ Promise 异常已触发(由 GlobalErrorTracker 自动捕获)'); }; const testReactError = () => { addResult('🧪 测试 3: 触发 React 渲染错误...'); trackError('react_error', '组件渲染失败:测试故意错误', true, { component: 'TestComponent', stack_trace: 'Error: 测试错误\n at TestComponent...', }); addResult('✅ React 错误已发送到 GA4(标记为 fatal)'); }; const testNetworkError = () => { addResult('🧪 测试 4: 模拟网络请求错误...'); trackError('network_error', 'Failed to fetch: https://api.example.com/data', false, { url: 'https://api.example.com/data', status_code: 0, request_method: 'GET', }); addResult('✅ 网络错误已发送到 GA4'); }; const clearResults = () => { setTestResults([]); }; return (

🧪 GA4 错误监控测试面板

测试用例

{testResults.length > 0 && (

📋 测试日志

{testResults.map((result, index) => (
{result}
))}
)}

💡 如何验证错误是否成功发送到 GA4?

  1. 点击上面的测试按钮
  2. 打开{' '} Google Analytics 后台
  3. 导航到:报告 → 实时
  4. 在事件搜索框输入 exception
  5. 你应该能在 30 秒内看到错误事件出现!

🔧 开发者工具调试

在开发模式下,打开浏览器控制台(F12),你会看到类似这样的日志:

{`[GA4] Error tracked: {
  description: "[javascript_error] 测试错误:这是一个故意的 JavaScript 错误",
  fatal: "false",
  url: "http://localhost:3000/test-error-tracking",
  timestamp: "2025-01-15T10:30:00.000Z",
  test_id: "test_js_error",
  filename: "test-error-page.tsx",
  lineno: 20
}`}
          
); }