有时 console.log 显示在 log-ios 中,有时不显示

Sometimes console.log shows in log-ios sometimes it doesn't

我在一个终端中有 运行 react-native start,然后在另一个终端中有 react-native ios-run。我最初的 console.log 很少出现,有时会出现。

很多次,我随机看到:

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

我的 console.log 是否被丢弃了?我尝试清除控制台以更清楚地查看它,但我也找不到清除控制台的方法。

在 Android 上,我不介意缺少 console.log

react-native 使用 syslog 守护进程记录信息。该守护进程试图防止向日志发送垃圾邮件(DoS 攻击)。这些限制是基于每个进程设置的。

简单的解决方案是 stop/start 模拟器,您将获得不受先前行为限制的新进程。

另一个解决方案是禁用 syslogd 限制,这在很大程度上取决于您的操作系统。

我发现JavascriptCore引擎不会自动将console.log重定向到XCode output panel或系统内置Console.App,更不用说自毁了log-ios 命令。

无需在浏览器中进行远程调试即可查看 console.log 的唯一方法是我们自己重定向(绑定)它:

//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;
}

注意:reactInstance中的JSContext是在另一个线程中创建的,我不知道如何获取加载事件(仅在我的project, 因为我不喜欢修改 react-native 引擎), 在这里等待一段时间进行测试。