UPDATE
实际上有一种非常方便的方法可以使特定模拟器的某些日志静音:
xcrun simctl spawn booted log config --subsystem com.apple.network --category boringssl --mode level:off
还建议静默其他常见的不重要日志:
xcrun simctl spawn booted log config --subsystem com.apple.CoreBluetooth --mode level:off
xcrun simctl spawn booted log config --subsystem com.apple.CoreTelephony --mode level:off
原始答案(背景)
这些烦人的消息来自libboringssl.dylib :: boringssl_metrics_log_event
:
int boringssl_metrics_log_event(...) {
...
if (g_boringssl_log != nil && os_log_type_enabled(g_boringssl_log, OS_LOG_TYPE_ERROR) {
os_log_error(g_boringssl_log, "%s(%d) Failed to log metrics", "boringssl_metrics_log_metric_block_invoke", 151);
}
...
}
消除这些消息的一个简单方法是取消g_boringssl_log
.
g_boringssl_log
是一个全局变量:
os_log_t g_boringssl_log = nil;
它被初始化为boringssl_log_open
:
void boringssl_log_open() {
static dispatch_token onceToken = nil;
dispatch_once(onceToken, ^{
g_boringssl_log = os_log_create("com.apple.network", "boringssl");
});
}
IMO最简单的解决方案是无效g_boring_ssl
是跳过执行dispatch_once
.
这可以通过设置断点来实现__boringssl_log_open_block_invoke
用行动thread return
。该断点将被调用一次,感谢dispatch_once
,但是函数体不会被执行,因为立即执行thread return
. So g_boringssl_log
永远不会被初始化,并且控制台中不会有任何日志。
PS我可能还建议设置一个类似的断点____nwlog_connection_log_block_invoke
from libnetwork.dylib
.