@@ -5,6 +5,12 @@ import { registerGlobals } from '@livekit/react-native';
55import { LogLevel , setLogLevel } from 'livekit-client' ;
66import { setJSExceptionHandler } from 'react-native-exception-handler' ;
77import ReactNativeForegroundService from '@supersami/rn-foreground-service' ;
8+
9+ // @ts -ignore
10+ import {
11+ observe as observeLogBoxLogs ,
12+ symbolicateLogNow ,
13+ } from 'react-native/Libraries/LogBox/Data/LogBoxData' ;
814setJSExceptionHandler ( ( error ) => {
915 console . log ( 'error:' , error , error . stack ) ;
1016} , true ) ;
@@ -13,3 +19,42 @@ setLogLevel(LogLevel.debug);
1319registerGlobals ( ) ;
1420ReactNativeForegroundService . register ( ) ;
1521AppRegistry . registerComponent ( appName , ( ) => App ) ;
22+
23+ // LogBox keeps all logs that you have not viewed yet.
24+ // When a new log comes in, we only want to print out the new ones.
25+ let lastCount = 0 ;
26+
27+ // @ts -ignore
28+ observeLogBoxLogs ( ( data ) => {
29+ const logs = Array . from ( data . logs ) ;
30+
31+ // @ts -ignore
32+ const symbolicatedLogs = logs . filter ( ( log ) => log . symbolicated . stack ?. length ) ;
33+ for ( let i = lastCount ; i < symbolicatedLogs . length ; i ++ ) {
34+ // use log instead of warn/error to prevent resending error to LogBox
35+ console . log ( formatLog ( symbolicatedLogs [ i ] ) ) ;
36+ }
37+ lastCount = symbolicatedLogs . length ;
38+
39+ // Trigger symbolication on remaining logs because
40+ // logs do not symbolicate until you click on LogBox
41+
42+ // @ts -ignore
43+ logs
44+ . filter ( ( log ) => log . symbolicated . status === 'NONE' )
45+ . forEach ( ( log ) => symbolicateLogNow ( log ) ) ;
46+ } ) ;
47+
48+ // @ts -ignore
49+ function formatLog ( log ) {
50+ const stackLines = ( log . symbolicated . stack || [ ] )
51+ // @ts -ignore
52+ . filter ( ( line ) => ! line . collapse )
53+ // @ts -ignore
54+ . map (
55+ ( line ) =>
56+ ` at ${ line . methodName } (${ line . file } :${ line . lineNumber } :${ line . column } )`
57+ )
58+ . join ( '\n' ) ;
59+ return `Error has been symbolicated\nError: ${ log . message . content } \n${ stackLines } ` ;
60+ }
0 commit comments