omnis-logger-sdk
v1.0.16
Published
SDK для интеграции Omnis Logger в проекты
Downloads
30
Maintainers
Readme
Omnis Logger SDK
Универсальный SDK для логирования с автоматическим перехватом сетевых ошибок для Web и React Native приложений.
Основные возможности
- 🌐 Автоматический перехват сетевых ошибок (fetch, XMLHttpRequest)
- 🔧 Поддержка Web и React Native
- 📱 Автоматический сбор данных о браузере (для Web)
- 📊 Передача готовых данных об устройстве (для React Native)
- 🚨 Перехват необработанных ошибок
- 📝 Гибкое логирование с контекстом
- 🔄 Автоматические повторы при ошибках отправки
Установка
npm install @your-org/omnis-loggerИспользование
Web (Браузер)
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
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
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 (упрощенный)
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
Методы логирования
logger.error('Сообщение об ошибке', context);
logger.warn('Предупреждение', context);
logger.info('Информация', context);
logger.debug('Отладочная информация', context);
logger.exception(error, context); // Для объектов ErrorУправление контекстом
// Установка глобального контекста (будет добавлен ко всем логам)
logger.setGlobalContext({
feature: 'auth',
experiment: 'new-ui'
});
// Получение текущего контекста
const context = logger.getGlobalContext();
// Очистка глобального контекста
logger.clearGlobalContext();Управление пользователем и сессией
logger.setUser('new-user-id');
logger.setSession('new-session-id');Управление данными об устройстве
// Установка новых данных об устройстве (для React Native)
logger.setDeviceInfo(newDeviceInfo);
// Обновление существующих данных
logger.updateDeviceInfo({
customField: 'value',
networkType: '5g'
});
// Получение текущих данных
const deviceInfo = logger.getDeviceInfo();Принудительная отправка
// Отправить все логи из очереди немедленно
await logger.flush();Автоматический перехват
Сетевые ошибки
SDK автоматически перехватывает:
- HTTP ошибки (статус >= 400)
- Сетевые ошибки (нет соединения)
- Таймауты
Для fetch и XMLHttpRequest в браузере и React Native.
Глобальные ошибки
SDK автоматически перехватывает:
- Необработанные исключения
- Unhandled Promise rejections
- JavaScript ошибки в React Native
Примеры использования
Базовое использование в React Native
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 />;
};Использование в компонентах
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
);
};Формат данных лога
Каждый лог отправляется в следующем формате:
{
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: { /* данные об устройстве */ }
}