UNPKG

omnis-logger-sdk

Version:

SDK для интеграции Omnis Logger в проекты

317 lines (254 loc) 10 kB
# Omnis Logger SDK Универсальный SDK для логирования с автоматическим перехватом сетевых ошибок для Web и React Native приложений. ## Основные возможности - 🌐 **Автоматический перехват сетевых ошибок** (fetch, XMLHttpRequest) - 🔧 **Поддержка Web и React Native** - 📱 **Автоматический сбор данных о браузере** (для Web) - 📊 **Передача готовых данных об устройстве** (для React Native) - 🚨 **Перехват необработанных ошибок** - 📝 **Гибкое логирование** с контекстом - 🔄 **Автоматические повторы** при ошибках отправки ## Установка ```bash npm install @your-org/omnis-logger ``` ## Использование ### Web (Браузер) ```javascript import { initOmnisLogger } from '@your-org/omnis-logger'; // Инициализация для Web const logger = initOmnisLogger({ endpoint: 'https://your-api.com', apiKey: 'your-api-key', environment: 'production', platform: 'web', version: '1.0.0', userId: 'user-123', sessionId: 'session-456' }); // Логирование logger.error('Произошла ошибка', { action: 'user_click', component: 'Button' }); logger.info('Пользователь вошел в систему'); ``` Для Web браузера SDK автоматически соберет: - Данные о браузере и ОС - Размер экрана и пиксельное соотношение - User Agent - Язык и временная зона ### React Native ```javascript import { initOmnisLogger } from '@your-org/omnis-logger'; import DeviceInfo from 'react-native-device-info'; import { Platform } from 'react-native'; // Простая инициализация - SDK сам соберет все данные const logger = initOmnisLogger({ endpoint: 'https://your-api.com', apiKey: 'your-api-key', environment: 'production', platform: Platform.OS, version: '1.0.0', userId: 'user-123', sessionId: 'session-456', deviceInfoModule: DeviceInfo // Передаем модуль, SDK сам соберет данные }); // Логирование logger.error('Сетевая ошибка', { screen: 'Profile' }); ``` SDK автоматически соберет: - **Синхронные данные** (мгновенно): deviceId, model, brand, systemName, version, isTablet и др. - **Асинхронные данные** (в фоне): deviceName, manufacturer, isEmulator, uniqueId и др. - **Платформо-специфичные данные**: hasNotch/hasDynamicIsland для iOS, androidId/apiLevel для Android - **Размеры экрана** из React Native Dimensions API - **Сетевые данные** (если установлен @react-native-netinfo/netinfo) ## Конфигурация ### OmnisLoggerConfig ```typescript interface OmnisLoggerConfig { endpoint: string; // URL API для отправки логов apiKey: string; // API ключ для авторизации environment?: 'development' | 'staging' | 'production'; // Окружение platform?: string; // Платформа (web, react-native) version?: string; // Версия приложения userId?: string; // ID пользователя sessionId?: string; // ID сессии enableConsole?: boolean; // Логирование в консоль (по умолчанию: true) enableGlobalErrorHandlers?: boolean; // Перехват глобальных ошибок (по умолчанию: true) enableNetworkErrorCapture?: boolean; // Перехват сетевых ошибок (по умолчанию: true) maxRetries?: number; // Количество повторов (по умолчанию: 3) timeout?: number; // Таймаут запросов в мс (по умолчанию: 5000) deviceInfo?: DeviceInfo; // Готовые данные об устройстве (для Web или кастомных данных) deviceInfoModule?: any; // Модуль react-native-device-info (для React Native) } ``` ### DeviceInfo (упрощенный) ```typescript interface DeviceInfo { // Общие поля platform?: string; os?: string; osVersion?: string; userAgent?: string; language?: string; timezone?: string; // Экран screenWidth?: number; screenHeight?: number; pixelRatio?: number; // React Native основные поля deviceId?: string; deviceName?: string; manufacturer?: string; brand?: string; model?: string; systemName?: string; systemVersion?: string; version?: string; isTablet?: boolean; isEmulator?: boolean; // Сетевые данные networkType?: string; isConnected?: boolean; // Дополнительные поля [key: string]: any; } ``` ## API ### Методы логирования ```javascript logger.error('Сообщение об ошибке', context); logger.warn('Предупреждение', context); logger.info('Информация', context); logger.debug('Отладочная информация', context); logger.exception(error, context); // Для объектов Error ``` ### Управление контекстом ```javascript // Установка глобального контекста (будет добавлен ко всем логам) logger.setGlobalContext({ feature: 'auth', experiment: 'new-ui' }); // Получение текущего контекста const context = logger.getGlobalContext(); // Очистка глобального контекста logger.clearGlobalContext(); ``` ### Управление пользователем и сессией ```javascript logger.setUser('new-user-id'); logger.setSession('new-session-id'); ``` ### Управление данными об устройстве ```javascript // Установка новых данных об устройстве (для React Native) logger.setDeviceInfo(newDeviceInfo); // Обновление существующих данных logger.updateDeviceInfo({ customField: 'value', networkType: '5g' }); // Получение текущих данных const deviceInfo = logger.getDeviceInfo(); ``` ### Принудительная отправка ```javascript // Отправить все логи из очереди немедленно await logger.flush(); ``` ## Автоматический перехват ### Сетевые ошибки SDK автоматически перехватывает: - HTTP ошибки (статус >= 400) - Сетевые ошибки (нет соединения) - Таймауты Для **fetch** и **XMLHttpRequest** в браузере и React Native. ### Глобальные ошибки SDK автоматически перехватывает: - Необработанные исключения - Unhandled Promise rejections - JavaScript ошибки в React Native ## Примеры использования ### Базовое использование в React Native ```javascript import { initOmnisLogger } from '@your-org/omnis-logger'; import DeviceInfo from 'react-native-device-info'; // App.js const App = () => { useEffect(() => { const initializeLogger = async () => { const deviceInfo = { platform: 'react-native', deviceId: await DeviceInfo.getDeviceId(), deviceName: await DeviceInfo.getDeviceName(), manufacturer: await DeviceInfo.getManufacturer(), model: DeviceInfo.getModel(), systemName: DeviceInfo.getSystemName(), systemVersion: DeviceInfo.getSystemVersion(), version: DeviceInfo.getVersion(), isTablet: DeviceInfo.isTablet(), isEmulator: await DeviceInfo.isEmulator(), }; const logger = initOmnisLogger({ endpoint: 'https://api.example.com', apiKey: 'your-api-key', environment: __DEV__ ? 'development' : 'production', platform: 'react-native', version: '1.0.0', deviceInfo: deviceInfo }); // Глобальный контекст logger.setGlobalContext({ appVersion: '1.0.0', buildNumber: '123' }); }; initializeLogger(); }, []); return <YourApp />; }; ``` ### Использование в компонентах ```javascript import { getOmnisLogger } from '@your-org/omnis-logger'; const ProfileScreen = () => { const logger = getOmnisLogger(); const handleSaveProfile = async () => { try { await saveProfile(); logger?.info('Профиль сохранен', { screen: 'Profile', action: 'save' }); } catch (error) { logger?.exception(error, { screen: 'Profile', action: 'save' }); } }; return ( // ваш UI ); }; ``` ## Формат данных лога Каждый лог отправляется в следующем формате: ```javascript { level: 'error' | 'warn' | 'info' | 'debug', message: 'Сообщение лога', stack?: 'Stack trace для ошибок', context: { /* пользовательский контекст */ }, userAgent: 'User agent браузера', url: 'Текущий URL (для браузера)', userId: 'ID пользователя', sessionId: 'ID сессии', platform: 'Платформа', version: 'Версия приложения', environment: 'development|staging|production', deviceInfo: { /* данные об устройстве */ } } ```