当使用Xcode 8+并创建一个新的空白项目时,运行应用程序时会出现以下日志:

2016-06-13 16:33:34.406093 TestiOS10[8209:100611] bundleid: com.appc.TestiOS10, enable_level: 0, persist_level: 0, propagate_with_activity: 0
2016-06-13 16:33:34.406323 TestiOS10[8209:100607] Created DB, header sequence number = 248
2016-06-13 16:33:34.409564 TestiOS10[8209:100611] subsystem: com.apple.UIKit, category: HIDEvents, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 0, privacy_setting: 0
2016-06-13 16:33:34.504117 TestiOS10[8209:100607] Created DB, header sequence number = 248
2016-06-13 16:33:34.548023 TestiOS10[8209:100607] subsystem: com.apple.BaseBoard, category: MachPort, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 0, privacy_setting: 0
2016-06-13 16:33:34.568458 TestiOS10[8209:100608] subsystem: com.apple.FrontBoard, category: Common, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 0, privacy_setting: 0

也许有人已经找到了这个的配置?


这与Xcode 8 Beta发布说明中发现的一个已知日志问题有关(也在WWDC上询问了一位工程师)。

在Watch模拟器中调试WatchOS应用程序时,操作系统可能会产生过多的 大量无用的日志记录。(26652255)

目前没有可用的解决方案,你必须等待新版本的Xcode。

编辑7/5/16:这应该是修复了Xcode 8 Beta 2:

在Xcode 8 beta 2 - IDE中解决 调试 当在模拟器上调试应用程序时,日志是可见的。(26457535)

Xcode 8 Beta 2发布说明


这个解决方案对我来说很有效:

在模拟器中运行应用程序 打开系统日志(⌘+ /)

这将转储出所有的调试数据和nslog。

过滤你的NSLog语句:

在每一个前加上一个符号,例如:NSLog(@"^测试日志") 使用右上方的搜索框过滤结果,在上面的例子中是“^”

这是你应该得到的:


对我来说,这在Xcode 8.0 beta 2 (8S162m)中仍然没有修复,额外的日志也出现在Xcode控制台中

** EDIT 8/1/16:这已经在Xcode 8 Beta 4 (8S188o)的发布说明中被确认为仍然存在的问题。

Xcode 8 beta 4 - IDE中的已知问题 调试 •Xcode调试控制台显示来自系统框架的额外日志 在模拟器中调试应用程序。(27331147, 26652255)

据推测,这个问题将在通用发布时得到解决。在那之前,耐心,虽然不理想,但我正在使用的一个变通办法是下面…

类似于之前的答案,我不得不:

在打印日志前加上某种特殊字符(例如*或^或!等等) 然后使用控制台窗格右下角的搜索框,通过输入我选择的特殊字符来过滤我的控制台日志,以使控制台按预期显示我的打印日志


我的解决方案是在断点中使用调试器命令和/或日志消息。

并将控制台的输出从所有输出更改为调试器输出


试试这个:

1 -从Xcode菜单打开:Product > Scheme > Edit Scheme

2 -在“环境变量”中设置OS_ACTIVITY_MODE = disable


一条推特给了我答案——https://twitter.com/rustyshelf/status/775505191160328194

为了阻止Xcode 8 iOS模拟器疯狂登录,在调试方案中设置环境变量OS_ACTIVITY_MODE = disable。

它工作。


好的。关于这个似乎有很多混乱,所以我将给你们提供一种不使用方案技巧的方法来坚持它。我将具体解决iOS模拟器,但这也可能需要应用于电视Sim以及位于不同的目录。

导致这些问题的是Xcode目录下的plist。当Sim启动时,启动一个名为configd_sim的进程,它读取plist并打印调试信息,如果plist指定它们应该被记录。

plist位于这里:

/应用程序/ xcode /内容/开发/平台/ iPhoneSimulator.platform /开发/ sdk / iPhoneSimulator.sdk /系统/图书馆/偏好/日志/子系统

如果您正在使用beta,请注意dir将有所不同。

您将在这个目录中看到许多plist。现在,构建并运行应用程序并观察日志。您正在查找紧接在子系统:部分后面的内容。紧随其后的名称表示相应的有问题的plist。

从那里,修改plist敲除调试[Level]键/值,这是一个字典,包含"Enable" => "Default"键/值…或者简单地删除plist。注意,你需要root用户才能做这些,因为它们位于Xcode应用中。

plutil -p命令也可能对您有用。即。

plutil -p /Applications/Xcode.app/Contents/Developer/Platforms/AppleTVSimulator.platform/Developer/SDKs/AppleTVSimulator.sdk/System/Library/Preferences/Logging/Subsystems/com.apple.BackBoardServices.fence.plist

这给了我一个有问题的plist,其中包括:

{“缺省选项”= >{“水平”= >{“启用”= >“默认”}}}

祝你好运。


OS_ACTIVITY_MODE对我不起作用(这可能是因为我将disable拼写为disabled,但这不是更自然吗?!?),或者至少没有阻止大量消息。这就是环境变量的真正含义。

https://llvm.org/svn/llvm-project/lldb/trunk/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp

lldb_private::Error
PlatformDarwin::LaunchProcess(lldb_private::ProcessLaunchInfo &launch_info) {
  // Starting in Fall 2016 OSes, NSLog messages only get mirrored to stderr
  // if the OS_ACTIVITY_DT_MODE environment variable is set.  (It doesn't
  // require any specific value; rather, it just needs to exist).
  // We will set it here as long as the IDE_DISABLED_OS_ACTIVITY_DT_MODE flag
  // is not set.  Xcode makes use of IDE_DISABLED_OS_ACTIVITY_DT_MODE to tell
  // LLDB *not* to muck with the OS_ACTIVITY_DT_MODE flag when they
  // specifically want it unset.
  const char *disable_env_var = "IDE_DISABLED_OS_ACTIVITY_DT_MODE";
  auto &env_vars = launch_info.GetEnvironmentEntries();
  if (!env_vars.ContainsEnvironmentVariable(disable_env_var)) {
    // We want to make sure that OS_ACTIVITY_DT_MODE is set so that
    // we get os_log and NSLog messages mirrored to the target process
    // stderr.
    if (!env_vars.ContainsEnvironmentVariable("OS_ACTIVITY_DT_MODE"))
      env_vars.AppendArgument(llvm::StringRef("OS_ACTIVITY_DT_MODE=enable"));
  }

  // Let our parent class do the real launching.
  return PlatformPOSIX::LaunchProcess(launch_info);
}

因此,在环境变量中设置OS_ACTIVITY_DT_MODE为“NO”(在主要回答中的方案截图中解释的GUI方法)使它为我工作。

至于NSLog是系统消息、错误和你自己的调试的转储场所:一个真正的日志记录方法可能无论如何都被调用,例如https://github.com/fpillet/NSLogger。

OR

喝新的酷爱饮料:http://asciiwwdc.com/2016/sessions/721 https://developer.apple.com/videos/play/wwdc2016/721/ 在彻底检查整个日志API之后出现一些问题并不奇怪。

齿顶高

不管怎样,NSLog只是一个垫片:

https://developer.apple.com/library/content/releasenotes/Miscellaneous/RN-Foundation-OSX10.12/

NSLog / CFLog . log NSLog现在只是在大多数情况下os_log的一个垫片。

现在只有为另一个env变量引用源代码才有意义。这是一个完全不同的地方,这一次来自苹果内部。不知道为什么它们重叠。[关于NSLog的错误评论被删除]

[编辑22 Sep]:我想知道“发布”和“流”与“调试”有什么不同。来源不够。

https://github.com/macosforge/libdispatch/blob/8e63547ea4e5abbfe55c0c3064181c4950a791d3/src/voucher.c

e = getenv("OS_ACTIVITY_MODE");
if (e) {
    if (strcmp(e, "release") == 0) {
        mode = voucher_activity_mode_release;
    } else if (strcmp(e, "debug") == 0) {
        mode = voucher_activity_mode_debug;
    } else if (strcmp(e, "stream") == 0) {
        mode = voucher_activity_mode_stream;
    } else if (strcmp(e, "disable") == 0) {
        mode = voucher_activity_mode_disable;
    }
}

基于来自@rustyshelf的原始推文,以及来自iDevzilla的示例回答,这里有一个解决方案,可以在不禁用设备NSLog输出的情况下消除模拟器的噪声。

Product > Scheme > Edit Scheme…>运行(调试),将OS_ACTIVITY_MODE环境变量设置为${DEBUG_ACTIVITY_MODE},如下所示:

转到项目构建设置,并单击+添加名为DEBUG_ACTIVITY_MODE的用户定义设置。展开此设置并单击Debug旁边的+以添加特定于平台的值。选择下拉菜单并将其更改为“Any iOS Simulator”。然后将其值设置为“disable”,使其看起来像这样:


在xcode 8.1(测试版本8.1 beta版(8T46g))中,这不再是一个问题。您可以从方案中删除OS_ACTIVITY_MODE环境变量。

https://developer.apple.com/go/?id=xcode-8.1-beta-rn

调试 Xcode调试控制台不再显示来自系统的额外日志 在模拟器中调试应用程序时使用框架。(26652255, 27331147)


请看下面的步骤。

选择Product => Scheme =>编辑Scheme或使用快捷方式:CMD + < 从左边选择Run选项。 在“环境变量”一节中,添加变量OS_ACTIVITY_MODE = disable

欲了解更多信息,请找到下面的GIF表示。


在Xcode 10中,OS_ACTIVITY_MODE变量带disable(或默认值)也会关闭NSLog。

因此,如果你想摆脱控制台噪音,而不是你自己的日志,你可以尝试旧的printf("")而不是NSLog,因为它不受OS_ACTIVITY_MODE = disable的影响。

但最好在这里查看新的os_log API。


请注意,对于iOS 14模拟器,OS_ACTIVITY_MODE=disable将不会显示任何使用新的Swift Logger的日志。您必须删除或启用它。


我读了所有的解决方案,到目前为止没有任何工作,我在写这个响应的时候使用XCODE 12.5,这是在调试器中看到的最讨厌的事情,有这么一堆/泛滥的不想要的消息。

我所做的解决方案比大多数复杂的解决方案要简单得多,以下是我解决这个烦人问题的方法:

不需要使用任何环境变量等,否则使用这些建议的前一篇文章将禁用NSLOG输出,这不是你想要的在这种情况下。 我确保我所有的NSLOG将包含一个字符串,我将在以后监视,例如:

以前我经常做:

NSLog(@"Hello World");

现在,我想:

NSLog(@"[Admin]: Hello World");

而“[Admin]”是我的程序名(或除[Admin]以外的任何字符串)。

(可选步骤)或(更容易),我写了一个函数来通道(好吧;代理)NSLog到另一个全局函数“日志”,而所有我的日志将去该函数,然后日志函数将追加“[Admin]”字符串到原始日志字符串,还添加日志时间和其他项目,我需要等(类似于WebLogic或任何其他JAVA日志),这确保所有日志将遵循一个标准。 …这是价值百万美元的核武器:

现在,进入你的调试器窗口,在底部你会看到一个“搜索”窗口,而它说“过滤器”,输入你的字符串(例如;“[Admin]”),按ENTER键,任务完成。

这样,你只会看到你喜欢的线条,

当你想过滤掉其他组件时也很有用,例如,对于网络通信,我使用更多的字符串,我可以稍后过滤。

换句话说,烦人的日志行与你的应用程序无关,但你选择不看到他们使用上述命令,我希望解决这个问题。

希望大家都能度过美好的一天。

H