Sometimes console.log shows in log-ios sometimes i

2019-02-10 04:21发布

I have run react-native start in one terminal, and then react-native ios-run in another. My initial console.log rarely show, sometimes they do.

Lot's of times, randomly I do see:

LOG MESSAGE QUOTA EXCEEDED - SOME MESSAGES FROM THIS PROCESS HAVE BEEN DISCARDED

Are my console.log's being discarded? I tried clearing the console to see it more clearly but I can't find a way to clear console either.

On Android, I wouldn't have issue with missing console.log.

2条回答
我命由我不由天
2楼-- · 2019-02-10 04:38

i found that the JavascriptCore engine won't automatically redirect the console.log to either XCode output panel or the system builtin Console.App, not to mention the self-broken log-ios command.

the only way to see console.log without remote debugging in browser is redirect(bind) it ourselves:

//Add this headers
#import <JavaScriptCore/JavaScriptCore.h>
#import <jschelpers/JavaScriptCore. h>
#import <React/RCTBridge+Private.h>
...
...

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

  NSURL *jsCodeLocation;
  ...
  ...
  [self.window makeKeyAndVisible];


  ::sleep(2); //<---!!!!!see below

  JSGlobalContextRef globalContext = rootView.bridge.jsContextRef;
  JSContext *context = [JSC_JSContext(globalContext) contextWithJSGlobalContextRef:globalContext];
  context[@"console"][@"log"] = ^(NSString *message) {
    NSLog(@"Javascript log: %@",message);
  };
  return YES;
}

Caution: the JSContext within reactInstance is created in another thread, I don't know how to get the loaded event(in only my project, since i don't like to modify the react-native engine), just wait sometime here for testing purpose.

查看更多
Luminary・发光体
3楼-- · 2019-02-10 04:49

react-native logs information using syslog daemon. This daemon attempts to prevent spamming to the log (DoS attack). These limits are set on per process basis.

The simple solution is to stop/start simulator and you will be obtain new process that is not limited by the previous behaviour.

The other solution is to disable syslogd limits what will be heavilly depends on your operation system.

查看更多
登录 后发表回答