Download js/utils/error_logger.js from Mhdeusi/RewardApp: direct link, hf CLI and curl.
- Browser
- Download file 3.83 kB
-
https://huggingface.co/spaces/Mhdeusi/RewardApp/resolve/main/js/utils/error_logger.js
- Command line
-
hf download hf://spaces/Mhdeusi/RewardApp/js/utils/error_logger.js
-
curl -L -o error_logger.js https://huggingface.co/spaces/Mhdeusi/RewardApp/resolve/main/js/utils/error_logger.js
3.83 kB
| class ErrorLogger { | |
| constructor() { | |
| this.logKey = 'app_error_log'; | |
| this.maxLogs = 100; | |
| this.enabled = true; | |
| } | |
| init() { | |
| // پاک کردن لاگهای قدیمی در صورت نیاز | |
| this.cleanupOldLogs(); | |
| // ثبت خطاهای全局 | |
| window.addEventListener('error', (event) => { | |
| this.logError({ | |
| type: 'global_error', | |
| message: event.message, | |
| filename: event.filename, | |
| lineno: event.lineno, | |
| colno: event.colno, | |
| error: event.error?.toString(), | |
| timestamp: new Date().toISOString() | |
| }); | |
| }); | |
| // ثبت rejectionهای catch نشده | |
| window.addEventListener('unhandledrejection', (event) => { | |
| this.logError({ | |
| type: 'unhandled_rejection', | |
| reason: event.reason?.toString(), | |
| timestamp: new Date().toISOString() | |
| }); | |
| }); | |
| console.log('✅ Error logger initialized'); | |
| } | |
| logError(errorData) { | |
| if (!this.enabled) return; | |
| try { | |
| const logs = this.getLogs(); | |
| logs.push({ | |
| ...errorData, | |
| id: this.generateId(), | |
| userAgent: navigator.userAgent, | |
| url: window.location.href | |
| }); | |
| // محدود کردن تعداد لاگها | |
| if (logs.length > this.maxLogs) { | |
| logs.splice(0, logs.length - this.maxLogs); | |
| } | |
| localStorage.setItem(this.logKey, JSON.stringify(logs)); | |
| // همچنین در کنسول نمایش داده شود | |
| console.error('🔴 Error logged:', errorData); | |
| } catch (error) { | |
| console.error('Failed to log error:', error); | |
| } | |
| } | |
| getLogs() { | |
| try { | |
| const logs = localStorage.getItem(this.logKey); | |
| return logs ? JSON.parse(logs) : []; | |
| } catch (error) { | |
| console.error('Failed to get logs:', error); | |
| return []; | |
| } | |
| } | |
| clearLogs() { | |
| try { | |
| localStorage.removeItem(this.logKey); | |
| console.log('✅ Error logs cleared'); | |
| } catch (error) { | |
| console.error('Failed to clear logs:', error); | |
| } | |
| } | |
| exportLogs() { | |
| const logs = this.getLogs(); | |
| const dataStr = JSON.stringify(logs, null, 2); | |
| const dataBlob = new Blob([dataStr], { type: 'application/json' }); | |
| const url = URL.createObjectURL(dataBlob); | |
| const link = document.createElement('a'); | |
| link.href = url; | |
| link.download = `error_logs_${new Date().toISOString().split('T')[0]}.json`; | |
| link.click(); | |
| URL.revokeObjectURL(url); | |
| } | |
| cleanupOldLogs() { | |
| const logs = this.getLogs(); | |
| const oneWeekAgo = new Date(); | |
| oneWeekAgo.setDate(oneWeekAgo.getDate() - 7); | |
| const filteredLogs = logs.filter(log => | |
| new Date(log.timestamp) > oneWeekAgo | |
| ); | |
| if (filteredLogs.length !== logs.length) { | |
| localStorage.setItem(this.logKey, JSON.stringify(filteredLogs)); | |
| } | |
| } | |
| generateId() { | |
| return Date.now().toString(36) + Math.random().toString(36).substr(2); | |
| } | |
| enable() { | |
| this.enabled = true; | |
| } | |
| disable() { | |
| this.enabled = false; | |
| } | |
| } | |
| // ایجاد نمونه全局 | |
| const errorLogger = new ErrorLogger(); | |
| // قرار دادن در全局 برای دسترسی از کنسول | |
| window.errorLogger = errorLogger; | |
| // راهاندازی هنگام بارگذاری | |
| document.addEventListener('DOMContentLoaded', () => { | |
| errorLogger.init(); | |
| }); |