vue-pure-admin日志管理:前端日志收集与分析

【免费下载链接】vue-pure-admin 全面ESM+Vue3+Vite+Element-Plus+TypeScript编写的一款后台管理系统(兼容移动端) 【免费下载链接】vue-pure-admin 项目地址: https://gitcode.com/GitHub_Trending/vu/vue-pure-admin

前言:为什么前端也需要日志管理?

在日常开发中,你是否遇到过这样的场景:

  • 用户反馈页面白屏,但开发环境无法复现
  • 生产环境出现未知错误,但缺乏详细的错误信息
  • 需要追踪用户操作行为,优化产品体验
  • 监控前端性能瓶颈,提升页面加载速度

传统的后端日志系统已经相当成熟,但前端日志管理往往被忽视。vue-pure-admin作为一款企业级后台管理系统,提供了完善的前端日志收集与分析解决方案。

核心日志收集机制

1. 全局错误捕获

vue-pure-admin通过Vue的全局错误处理机制,实现了完整的错误日志收集:

// 在main.ts中配置全局错误处理
app.config.errorHandler = (err, instance, info) => {
  console.error('Vue错误:', err);
  console.error('组件实例:', instance);
  console.error('错误信息:', info);
  
  // 发送错误日志到服务器
  logToServer({
    type: 'vue_error',
    error: err.toString(),
    component: instance?.$options.name,
    info,
    timestamp: new Date().toISOString(),
    url: window.location.href,
    userAgent: navigator.userAgent
  });
};

2. 网络请求监控

基于Axios的拦截器机制,实现了请求/响应的完整日志记录:

// src/utils/http/index.ts
instance.interceptors.response.use(
  (response: PureHttpResponse) => {
    // 记录成功请求日志
    logRequest({
      url: response.config.url,
      method: response.config.method,
      status: response.status,
      duration: Date.now() - response.config.metadata?.startTime,
      timestamp: new Date().toISOString()
    });
    return response.data;
  },
  (error: PureHttpError) => {
    // 记录失败请求日志
    logError({
      type: 'http_error',
      url: error.config?.url,
      method: error.config?.method,
      status: error.response?.status,
      message: error.message,
      timestamp: new Date().toISOString()
    });
    return Promise.reject(error);
  }
);

3. 用户行为追踪

通过自定义指令和组件生命周期钩子,记录用户关键操作:

// 用户操作日志收集
const trackUserAction = (action: string, data?: any) => {
  const logData = {
    action,
    data,
    timestamp: new Date().toISOString(),
    userId: getCurrentUserId(),
    path: window.location.pathname
  };
  
  // 发送到日志服务器或存储在本地
  if (navigator.onLine) {
    sendToLogServer(logData);
  } else {
    storeOfflineLog(logData);
  }
};

日志分类与级别

vue-pure-admin将日志分为以下几个类别:

日志类型 级别 描述 使用场景
ERROR 错误 系统级错误、未捕获异常 监控系统稳定性
WARN 警告 潜在问题、非关键错误 性能优化提示
INFO 信息 用户操作、业务流程 用户行为分析
DEBUG 调试 开发调试信息 开发阶段问题定位
HTTP 网络 请求响应日志 API监控与分析

日志存储策略

1. 实时上报

对于关键错误和重要操作,采用实时上报策略:

const sendToLogServer = async (logData: LogData) => {
  try {
    await http.post('/api/logs', logData, {
      timeout: 5000,
      retry: 3,
      retryDelay: 1000
    });
  } catch (error) {
    // 上报失败时降级到本地存储
    console.warn('日志上报失败,降级到本地存储:', error);
    storeLocalLog(logData);
  }
};

2. 批量上报

为减少网络请求,非关键日志采用批量上报策略:

class LogBatch {
  private logs: LogData[] = [];
  private batchSize = 20;
  private flushInterval = 10000; // 10秒

  addLog(log: LogData) {
    this.logs.push(log);
    if (this.logs.length >= this.batchSize) {
      this.flush();
    }
  }

  private flush() {
    if (this.logs.length === 0) return;
    
    const batchToSend = [...this.logs];
    this.logs = [];
    
    http.post('/api/logs/batch', batchToSend).catch(() => {
      // 失败后重新加入队列
      this.logs.unshift(...batchToSend);
    });
  }

  startAutoFlush() {
    setInterval(() => this.flush(), this.flushInterval);
  }
}

3. 离线存储

考虑到网络不稳定的情况,实现了离线日志存储:

const storeOfflineLog = async (logData: LogData) => {
  try {
    const offlineLogs = JSON.parse(localStorage.getItem('offline_logs') || '[]');
    offlineLogs.push(logData);
    
    // 控制离线日志数量,防止存储空间不足
    if (offlineLogs.length > 1000) {
      offlineLogs.splice(0, 200);
    }
    
    localStorage.setItem('offline_logs', JSON.stringify(offlineLogs));
  } catch (error) {
    console.error('离线日志存储失败:', error);
  }
};

性能监控集成

vue-pure-admin集成了全面的性能监控日志:

1. 页面加载性能

// 监控页面加载性能
const monitorPageLoad = () => {
  window.addEventListener('load', () => {
    const timing = performance.timing;
    const metrics = {
      dns: timing.domainLookupEnd - timing.domainLookupStart,
      tcp: timing.connectEnd - timing.connectStart,
      request: timing.responseEnd - timing.requestStart,
      domReady: timing.domContentLoadedEventEnd - timing.navigationStart,
      load: timing.loadEventEnd - timing.navigationStart
    };
    
    logPerformance(metrics);
  });
};

2. 资源加载监控

// 使用PerformanceObserver监控资源加载
const observer = new PerformanceObserver((list) => {
  list.getEntries().forEach(entry => {
    if (entry.entryType === 'resource') {
      logResourceLoad({
        name: entry.name,
        duration: entry.duration,
        size: entry.transferSize,
        type: entry.initiatorType
      });
    }
  });
});

observer.observe({ entryTypes: ['resource'] });

安全与隐私考虑

在日志收集过程中,vue-pure-admin充分考虑了安全和隐私问题:

1. 敏感信息过滤

const sanitizeLogData = (data: any): any => {
  if (typeof data !== 'object' || data === null) return data;
  
  const sensitiveFields = ['password', 'token', 'authorization', 'creditCard'];
  const sanitized = { ...data };
  
  sensitiveFields.forEach(field => {
    if (sanitized[field]) {
      sanitized[field] = '***REDACTED***';
    }
  });
  
  return sanitized;
};

2. GDPR合规

// 检查用户日志收集同意状态
const canCollectLogs = (): boolean => {
  const consent = localStorage.getItem('log_collection_consent');
  return consent === 'true';
};

// 提供用户控制选项
const setLogCollectionPreference = (enabled: boolean) => {
  localStorage.setItem('log_collection_consent', enabled.toString());
  if (!enabled) {
    clearAllLogs();
  }
};

日志分析可视化

vue-pure-admin提供了内置的日志分析界面:

1. 错误统计看板

mermaid

2. 性能趋势分析

mermaid

最佳实践指南

1. 开发环境配置

// vite.config.ts 中的日志配置
export default defineConfig({
  plugins: [
    // 开发环境保留console,生产环境移除
    removeConsole({
      includes: ['log', 'warn', 'error', 'info', 'debug']
    })
  ],
  build: {
    rollupOptions: {
      output: {
        // 生成sourcemap便于错误定位
        sourcemap: true
      }
    }
  }
});

2. 生产环境部署

# 构建时启用日志压缩
pnpm build --mode production --log-level warn

# 部署时配置日志收集端点
VITE_LOG_ENDPOINT=https://logs.yourdomain.com/api
VITE_LOG_SAMPLE_RATE=0.1 # 采样率10%

3. 监控告警设置

// 错误率监控告警
const monitorErrorRate = () => {
  setInterval(async () => {
    const stats = await getErrorStats('1h');
    if (stats.errorRate > 0.01) { // 错误率超过1%
      sendAlert({
        type: 'high_error_rate',
        rate: stats.errorRate,
        timestamp: new Date().toISOString()
      });
    }
  }, 300000); // 每5分钟检查一次
};

故障排查与调试

1. 本地日志查看

// 开发工具中查看日志
const enableDevTools = () => {
  if (process.env.NODE_ENV === 'development') {
    // 注册全局函数便于调试
    window.__PURE_ADMIN_LOGS__ = {
      getRecentLogs: () => localStorage.getItem('recent_logs'),
      clearLogs: () => localStorage.removeItem('recent_logs'),
      exportLogs: () => downloadLogs()
    };
  }
};

2. 日志搜索与过滤

// 实现日志搜索功能
const searchLogs = (query: string, filters: LogFilter = {}) => {
  return allLogs.filter(log => {
    const matchesQuery = !query || 
      log.message?.includes(query) ||
      log.type?.includes(query);
    
    const matchesFilters = Object.entries(filters).every(([key, value]) => {
      if (!value) return true;
      return log[key] === value;
    });
    
    return matchesQuery && matchesFilters;
  });
};

总结

vue-pure-admin的日志管理系统提供了从收集、存储、分析到可视化的完整解决方案。通过合理的日志分级、安全的隐私保护、智能的采样策略,既保证了系统的可观测性,又避免了过度监控带来的性能开销。

关键优势:

  • 全面性:覆盖错误、性能、用户行为等多个维度
  • 实时性:支持实时监控和告警
  • 安全性:内置敏感信息过滤和隐私保护
  • 可扩展:易于集成第三方日志服务
  • 开发者友好:提供丰富的调试工具和API

通过这套日志管理系统,开发团队可以快速定位和解决问题,产品团队可以深入了解用户行为,运维团队可以实时监控系统健康状态,真正实现了数据驱动的开发和运维。

【免费下载链接】vue-pure-admin 全面ESM+Vue3+Vite+Element-Plus+TypeScript编写的一款后台管理系统(兼容移动端) 【免费下载链接】vue-pure-admin 项目地址: https://gitcode.com/GitHub_Trending/vu/vue-pure-admin

更多推荐