UNPKG

@sentry/react-native

Version:
72 lines 2.62 kB
import { debug } from '@sentry/core'; import { NativeEventEmitter, NativeModules, Platform } from 'react-native'; import { isExpoGo } from './utils/environment'; const NATIVE_LOG_EVENT_NAME = 'SentryNativeLog'; /** * Sets up the native log listener that forwards logs from the native SDK to JS. * This only works when `debug: true` is set in Sentry options. * * @param callback - The callback to invoke when a native log is received. * @returns A function to remove the listener, or undefined if setup failed. */ export function setupNativeLogListener(callback) { if (Platform.OS !== 'ios' && Platform.OS !== 'android') { debug.log('Native log listener is only supported on iOS and Android.'); return undefined; } if (isExpoGo()) { return undefined; } if (!NativeModules.RNSentry) { debug.warn('Could not set up native log listener: RNSentry module not found.'); return undefined; } try { const eventEmitter = new NativeEventEmitter(NativeModules.RNSentry); const listener = eventEmitter.addListener(NATIVE_LOG_EVENT_NAME, (event) => { var _a, _b, _c; const logEntry = { level: (_a = event.level) !== null && _a !== void 0 ? _a : 'info', component: (_b = event.component) !== null && _b !== void 0 ? _b : 'Sentry', message: (_c = event.message) !== null && _c !== void 0 ? _c : '', }; callback(logEntry); }); debug.log('Native log listener set up successfully.'); let removed = false; return () => { if (!removed) { listener.remove(); removed = true; debug.log('Native log listener removed.'); } }; } catch (error) { debug.warn('Failed to set up native log listener:', error); return undefined; } } /** * Default handler for native logs that uses Sentry's debug logger. * This avoids interference with captureConsoleIntegration which would * otherwise capture these logs as breadcrumbs or events. */ export function defaultNativeLogHandler(log) { const message = `[Native] [${log.component}] ${log.message}`; switch (log.level.toLowerCase()) { case 'fatal': case 'error': debug.error(message); break; case 'warning': debug.warn(message); break; case 'info': case 'debug': default: debug.log(message); break; } } //# sourceMappingURL=NativeLogListener.js.map