LogRocket 基础使用 #

概述 #

LogRocket 提供了丰富的 API 来帮助你监控和分析前端应用。本章将介绍最常用的基础功能。

text
┌─────────────────────────────────────────────────────────────┐
│                    LogRocket 核心功能                        │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  ┌─────────────────────────────────────────────────────┐   │
│  │                    自动功能                          │   │
│  ├─────────────────────────────────────────────────────┤   │
│  │  ✅ 会话录制(DOM 变化、用户交互)                    │   │
│  │  ✅ JavaScript 错误捕获                              │   │
│  │  ✅ 网络请求记录                                     │   │
│  │  ✅ 控制台日志记录                                   │   │
│  │  ✅ 性能指标收集                                     │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
│  ┌─────────────────────────────────────────────────────┐   │
│  │                    手动功能                          │   │
│  ├─────────────────────────────────────────────────────┤   │
│  │  📝 用户识别 (identify)                              │   │
│  │  📝 事件追踪 (track)                                 │   │
│  │  📝 日志记录 (log/info/warn/error)                   │   │
│  │  📝 错误捕获 (captureException)                      │   │
│  │  📝 面包屑 (breadcrumb)                              │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
└─────────────────────────────────────────────────────────────┘

用户识别 #

基础用法 #

javascript
import LogRocket from 'logrocket';

LogRocket.identify('user-123', {
  name: 'John Doe',
  email: 'john@example.com'
});

用户属性 #

text
┌─────────────────────────────────────────────────────────────┐
│                    用户属性配置                              │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  标准属性:                                                  │
│  - name: 用户名                                             │
│  - email: 邮箱                                              │
│                                                             │
│  自定义属性:                                                │
│  - subscriptionType: 订阅类型                               │
│  - accountLevel: 账户等级                                   │
│  - createdAt: 创建时间                                      │
│  - lastLoginAt: 最后登录时间                                │
│  - totalPurchases: 总购买数                                 │
│                                                             │
│  限制:                                                     │
│  - 最多 50 个自定义属性                                     │
│  - 属性值必须是字符串、数字或布尔值                          │
│  - 属性名最多 100 个字符                                    │
│  - 属性值最多 500 个字符                                    │
│                                                             │
└─────────────────────────────────────────────────────────────┘

完整示例 #

javascript
function onUserLogin(user) {
  LogRocket.identify(user.id.toString(), {
    name: user.name,
    email: user.email,
    subscriptionType: user.subscription.type,
    accountLevel: user.account.level,
    createdAt: user.createdAt,
    lastLoginAt: new Date().toISOString(),
    totalPurchases: user.purchases.length,
    isPremium: user.subscription.type === 'premium'
  });
}

匿名用户 #

javascript
LogRocket.identify(null);

用户信息更新 #

javascript
function onUserProfileUpdate(user) {
  LogRocket.identify(user.id.toString(), {
    name: user.name,
    email: user.email,
    avatar: user.avatar
  });
}

事件追踪 #

基础用法 #

javascript
LogRocket.track('Event Name');

带属性的事件 #

javascript
LogRocket.track('Purchase Completed', {
  productId: 'prod-123',
  productName: 'Premium Plan',
  price: 99.99,
  currency: 'USD',
  paymentMethod: 'credit_card'
});

常见事件类型 #

text
┌─────────────────────────────────────────────────────────────┐
│                    常见事件类型                              │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  用户行为:                                                  │
│  - 'Button Clicked'                                         │
│  - 'Form Submitted'                                         │
│  - 'Page Viewed'                                            │
│  - 'Search Performed'                                       │
│                                                             │
│  业务事件:                                                  │
│  - 'Purchase Completed'                                     │
│  - 'Subscription Started'                                   │
│  - 'Item Added to Cart'                                     │
│  - 'Checkout Started'                                       │
│                                                             │
│  功能使用:                                                  │
│  - 'Feature Used'                                           │
│  - 'Help Article Viewed'                                    │
│  - 'Support Contacted'                                      │
│                                                             │
└─────────────────────────────────────────────────────────────┘

实际应用示例 #

javascript
function handlePurchase(order) {
  LogRocket.track('Purchase Completed', {
    orderId: order.id,
    total: order.total,
    items: order.items.length,
    paymentMethod: order.paymentMethod,
    discountApplied: order.discount > 0
  });
}

function handleSearch(query, results) {
  LogRocket.track('Search Performed', {
    query: query,
    resultsCount: results.length,
    hasResults: results.length > 0
  });
}

function handleFeatureUsage(featureName) {
  LogRocket.track('Feature Used', {
    feature: featureName,
    timestamp: Date.now()
  });
}

日志记录 #

日志级别 #

javascript
LogRocket.log('Regular log message');
LogRocket.info('Info message');
LogRocket.warn('Warning message');
LogRocket.error('Error message');
LogRocket.debug('Debug message');
text
┌─────────────────────────────────────────────────────────────┐
│                    日志级别说明                              │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  log: 普通日志,一般信息                                    │
│  info: 信息日志,重要事件                                   │
│  warn: 警告日志,潜在问题                                   │
│  error: 错误日志,错误事件                                  │
│  debug: 调试日志,开发调试                                  │
│                                                             │
│  使用场景:                                                  │
│  - log: 记录一般流程                                        │
│  - info: 记录重要业务事件                                   │
│  - warn: 记录异常但非错误的情况                             │
│  - error: 记录错误和异常                                    │
│  - debug: 开发调试(生产环境建议关闭)                      │
│                                                             │
└─────────────────────────────────────────────────────────────┘

日志最佳实践 #

javascript
function processPayment(paymentData) {
  LogRocket.info('Payment processing started', {
    orderId: paymentData.orderId,
    amount: paymentData.amount
  });
  
  try {
    const result = processPayment(paymentData);
    
    LogRocket.info('Payment processed successfully', {
      orderId: paymentData.orderId,
      transactionId: result.transactionId
    });
    
    return result;
  } catch (error) {
    LogRocket.error('Payment processing failed', {
      orderId: paymentData.orderId,
      error: error.message
    });
    
    throw error;
  }
}

结构化日志 #

javascript
function logUserAction(action, details) {
  LogRocket.info(`User Action: ${action}`, {
    action: action,
    timestamp: Date.now(),
    ...details
  });
}

logUserAction('Item Added to Cart', {
  productId: 'prod-123',
  quantity: 2,
  cartTotal: 199.99
});

错误捕获 #

captureException #

javascript
try {
  riskyOperation();
} catch (error) {
  LogRocket.captureException(error);
}

带额外信息 #

javascript
try {
  processOrder(orderData);
} catch (error) {
  LogRocket.captureException(error, {
    extra: {
      orderId: orderData.id,
      userId: orderData.userId,
      items: orderData.items
    },
    tags: {
      feature: 'checkout',
      severity: 'high'
    }
  });
}

自定义错误 #

javascript
function validateUser(user) {
  if (!user.email) {
    const error = new Error('User email is required');
    LogRocket.captureException(error, {
      extra: {
        userId: user.id,
        userName: user.name
      },
      tags: {
        feature: 'validation',
        type: 'user_data'
      }
    });
    throw error;
  }
}
text
┌─────────────────────────────────────────────────────────────┐
│                    captureException 参数                     │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  第一个参数:Error 对象                                     │
│  - 必须是 Error 实例或错误字符串                            │
│                                                             │
│  第二个参数:选项对象                                       │
│  - extra: 额外上下文信息                                   │
│  - tags: 标签(用于过滤和分组)                             │
│  - user: 用户信息(覆盖 identify 设置)                     │
│                                                             │
│  示例:                                                     │
│  LogRocket.captureException(error, {                        │
│    extra: {                                                 │
│      orderId: '123',                                        │
│      step: 'payment'                                        │
│    },                                                       │
│    tags: {                                                  │
│      feature: 'checkout',                                   │
│      priority: 'high'                                       │
│    }                                                        │
│  });                                                        │
│                                                             │
└─────────────────────────────────────────────────────────────┘

面包屑(Breadcrumbs) #

什么是面包屑? #

text
┌─────────────────────────────────────────────────────────────┐
│                    面包屑概念                                │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  面包屑是用户操作的轨迹记录,帮助理解错误发生前的上下文。     │
│                                                             │
│  示例:                                                     │
│                                                             │
│  时间线:                                                    │
│  ├── 10:30:01 用户访问首页                                  │
│  ├── 10:30:15 用户点击"产品"                                │
│  ├── 10:30:22 用户搜索"手机"                                │
│  ├── 10:30:45 用户点击"加入购物车"                          │
│  ├── 10:31:02 用户点击"结算"                                │
│  └── 10:31:05 ❌ 错误:支付失败                             │
│                                                             │
│  通过面包屑可以清楚看到错误发生前的用户操作路径。            │
│                                                             │
└─────────────────────────────────────────────────────────────┘

自动面包屑 #

LogRocket 自动记录以下面包屑:

text
自动记录的事件:
├── 用户交互(点击、输入)
├── 网络请求
├── 控制台日志
├── URL 变化
└── JavaScript 错误

手动添加面包屑 #

javascript
LogRocket.addBreadcrumb({
  category: 'ui',
  message: 'User clicked checkout button',
  level: 'info',
  data: {
    cartTotal: 199.99,
    itemCount: 3
  }
});

面包屑分类 #

javascript
function handleFormSubmit(formData) {
  LogRocket.addBreadcrumb({
    category: 'form',
    message: 'Form submitted',
    level: 'info',
    data: {
      formId: 'checkout-form',
      fields: Object.keys(formData)
    }
  });
}

function handleApiCall(url, method) {
  LogRocket.addBreadcrumb({
    category: 'fetch',
    message: `${method} ${url}`,
    level: 'info'
  });
}

function handleNavigation(from, to) {
  LogRocket.addBreadcrumb({
    category: 'navigation',
    message: `Navigate from ${from} to ${to}`,
    level: 'info'
  });
}
text
┌─────────────────────────────────────────────────────────────┐
│                    面包屑分类                                │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  常用分类:                                                  │
│  - ui: 用户界面交互                                         │
│  - fetch: 网络请求                                          │
│  - navigation: 路由导航                                     │
│  - form: 表单操作                                           │
│  - auth: 认证相关                                           │
│  - payment: 支付相关                                        │
│  - custom: 自定义分类                                       │
│                                                             │
│  日志级别:                                                  │
│  - debug: 调试信息                                          │
│  - info: 一般信息                                           │
│  - warning: 警告                                            │
│  - error: 错误                                              │
│                                                             │
└─────────────────────────────────────────────────────────────┘

会话 URL #

获取当前会话 URL #

javascript
const sessionUrl = LogRocket.sessionURL;
console.log('Current session URL:', sessionUrl);

发送会话链接到支持系统 #

javascript
async function submitSupportTicket(issue) {
  const sessionUrl = LogRocket.sessionURL;
  
  const response = await fetch('/api/support/tickets', {
    method: 'POST',
    body: JSON.stringify({
      issue: issue,
      logrocketSessionUrl: sessionUrl
    })
  });
  
  return response.json();
}

在错误报告中包含会话链接 #

javascript
window.onerror = function(message, source, lineno, colno, error) {
  const sessionUrl = LogRocket.sessionURL;
  
  fetch('/api/errors', {
    method: 'POST',
    body: JSON.stringify({
      message: message,
      source: source,
      lineno: lineno,
      colno: colno,
      error: error?.stack,
      sessionUrl: sessionUrl
    })
  });
};

标签(Tags) #

设置标签 #

javascript
LogRocket.setTag('feature', 'checkout');
LogRocket.setTag('experiment', 'new-design-v2');
LogRocket.setTag('customer_type', 'enterprise');

使用场景 #

text
┌─────────────────────────────────────────────────────────────┐
│                    标签使用场景                              │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  功能标记:                                                  │
│  LogRocket.setTag('feature', 'checkout');                   │
│                                                             │
│  实验标记:                                                  │
│  LogRocket.setTag('experiment', 'new-ui-v2');               │
│                                                             │
│  客户类型:                                                  │
│  LogRocket.setTag('customer_type', 'enterprise');           │
│                                                             │
│  环境标记:                                                  │
│  LogRocket.setTag('environment', 'production');             │
│                                                             │
│  优先级:                                                    │
│  LogRocket.setTag('priority', 'high');                      │
│                                                             │
│  用途:                                                     │
│  - 在控制台中过滤和搜索                                     │
│  - 对问题进行分组                                           │
│  - 分析特定功能的问题                                       │
│                                                             │
└─────────────────────────────────────────────────────────────┘

完整示例 #

购物流程监控 #

javascript
import LogRocket from 'logrocket';

function shoppingFlow() {
  LogRocket.identify('user-123', {
    name: 'John Doe',
    email: 'john@example.com',
    subscriptionType: 'premium'
  });
  
  LogRocket.setTag('feature', 'shopping');
  
  LogRocket.addBreadcrumb({
    category: 'navigation',
    message: 'User visited product page',
    level: 'info',
    data: { productId: 'prod-456' }
  });
  
  LogRocket.track('Product Viewed', {
    productId: 'prod-456',
    productName: 'Wireless Headphones',
    price: 99.99
  });
  
  LogRocket.addBreadcrumb({
    category: 'ui',
    message: 'User clicked add to cart',
    level: 'info',
    data: { productId: 'prod-456' }
  });
  
  LogRocket.track('Item Added to Cart', {
    productId: 'prod-456',
    quantity: 1
  });
  
  try {
    const order = processCheckout();
    
    LogRocket.track('Purchase Completed', {
      orderId: order.id,
      total: order.total
    });
    
    LogRocket.info('Purchase completed successfully', {
      orderId: order.id
    });
  } catch (error) {
    LogRocket.captureException(error, {
      extra: {
        cartItems: getCartItems()
      },
      tags: {
        feature: 'checkout',
        severity: 'high'
      }
    });
  }
}

表单提交流程 #

javascript
function handleFormSubmit(event) {
  event.preventDefault();
  
  const formData = new FormData(event.target);
  const data = Object.fromEntries(formData);
  
  LogRocket.addBreadcrumb({
    category: 'form',
    message: 'Form submission started',
    level: 'info',
    data: {
      formId: event.target.id,
      fields: Object.keys(data)
    }
  });
  
  LogRocket.track('Form Submitted', {
    formId: event.target.id
  });
  
  try {
    const result = submitForm(data);
    
    LogRocket.info('Form submitted successfully', {
      formId: event.target.id,
      resultId: result.id
    });
    
    LogRocket.track('Form Submission Success', {
      formId: event.target.id
    });
  } catch (error) {
    LogRocket.captureException(error, {
      extra: {
        formId: event.target.id,
        formData: sanitizeData(data)
      },
      tags: {
        feature: 'form',
        formType: event.target.id
      }
    });
    
    LogRocket.track('Form Submission Failed', {
      formId: event.target.id,
      error: error.message
    });
  }
}

API 速查表 #

javascript
LogRocket.init(appId, options)
LogRocket.identify(userId, userTraits)
LogRocket.track(eventName, eventProperties)
LogRocket.log(message)
LogRocket.info(message)
LogRocket.warn(message)
LogRocket.error(message)
LogRocket.debug(message)
LogRocket.captureException(error, options)
LogRocket.addBreadcrumb(breadcrumb)
LogRocket.setTag(key, value)
LogRocket.sessionURL

下一步 #

现在你已经掌握了 LogRocket 的基础使用方法,接下来学习 会话回放详解 深入了解如何分析和利用会话录制数据!

最后更新:2026-03-29