1. Console 实现原理
1.1. JS
- [console.js] global.console > getNativeLogFunction > global.nativeLoggingHook
1.2. iOS
- [JSCExecutorFactory.cpp] createJSExecutor > bindNativeLogger
- [RCTLog.mm] _RCTLogJavaScriptInternal -- 判断日志等级 RCTGetLogThreshold() --> RCTGetLocalLogFunction > RCTGetLogFunction
1.3. Android
- [OnLoad.cpp] installBindings > bindNativeLogger > [JSCLogging.cpp] reactAndroidLoggingHook
1.3.1. RCTLog.mm
打印日志函数
RCTLogFunction RCTDefaultLogFunction = ^(
RCTLogLevel level,
__unused RCTLogSource source,
NSString *fileName,
NSNumber *lineNumber,
NSString *message
)
{
NSString *log = RCTFormatLog([NSDate date], level, fileName, lineNumber, message);
fprintf(stderr, "%s\n", log.UTF8String);
fflush(stderr);
};
1.3.2. RCTAssert.m
assert 会抛异常
void RCTFatal(NSError *error)
{
@throw [[NSException alloc] initWithName:name reason:message userInfo:userInfo];
}
1.4. JS
JS
iOS