有时 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上显示的本机数据做出反应,但不在屏幕上