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

Posted

技术标签:

【中文标题】有时 console.log 在 log-ios 中显示有时它不会【英文标题】:Sometimes console.log shows in log-ios sometimes it doesn't 【发布时间】:2017-04-07 23:05:13 【问题描述】:

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

很多次,我随机看到:

超出日志消息配额 - 此过程中的一些消息已被丢弃

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

android 上,我不会有错过 console.log 的问题。

【问题讨论】:

尝试使用react-native-log-ios npm pkg,与react-native los-ios 相同的命令,但可以工作! 【参考方案1】:

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

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

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

【讨论】:

非常感谢 Marek,这已经困扰了很长时间。请您添加一些有关如何完成这些解决方案的步骤(尤其是第二个)。 @Noitidart 您对哪个操作系统感兴趣?在 MacOSX 上,它应该是 syslogd ... [-mps_limit quota] 谢谢 - 我在 Windows 10 for Android dev 上。然后对于 mac,我在 1012.1 Sierra 上。我对mac很陌生,最近2个月才开始。我不确定 syslogd 是什么 :( syslogd 是应用程序/守护进程的名称,它汇集了来自不同来源的日志信息。在这里查看***或问题。 -- 我已经好几年没用 Windows 了。【参考方案2】:

我发现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 是在另一个线程中创建的,我不知道如何获取加载的事件(仅在我的项目中,因为我不喜欢修改 react-native 引擎),在这里稍等一下以进行测试。

【讨论】:

哇,这是一个深刻的想法。感谢分享!

以上是关于有时 console.log 在 log-ios 中显示有时它不会的主要内容,如果未能解决你的问题,请参考以下文章

console.log 被重写覆盖以后如何恢复

对console.log上显示的本机数据做出反应,但不在屏幕上

Openstack中查看虚拟机console log的几种方法

快速删除项目中的输出日志console.log

妙用$.extend

前端JavaScript小技巧「建议收藏」