vue-pure-admin日志管理:前端日志收集与分析
·
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. 错误统计看板
2. 性能趋势分析
最佳实践指南
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
通过这套日志管理系统,开发团队可以快速定位和解决问题,产品团队可以深入了解用户行为,运维团队可以实时监控系统健康状态,真正实现了数据驱动的开发和运维。
更多推荐

所有评论(0)