隐藏奇怪的不需要的Xcode日志

Han*_*hel 676 xcode logging ios ios10 xcode8

使用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
Run Code Online (Sandbox Code Playgroud)

也许有人已经找到了这个配置来处理?

iDe*_*lla 1479

试试这个:

1-从Xcode菜单打开:产品>方案>编辑方案

2-在您的环境变量set OS_ACTIVITY_MODE=disable

截图

  • 不幸的是,这个选项为我隐藏了所有`NSLog的真实设备...... (97认同)
  • @iDevzilla,这个解决方案存在一些问题,它在使用真实设备时会从日志中删除一些重要的东西,比如自我记录的数据.请再次概述,我不确定它是最理想的解决方案. (44认同)
  • 对于想知道如何进入该屏幕的人,您需要转到产品>方案>编辑方案或Cmd + < (27认同)
  • 它也适用于Xcode 8.0版本,所以我建议它是解决方案. (25认同)
  • 任何在真实设备上显示NSLog的解决方案? (14认同)
  • 该问题仅在Simulator中有效.我个人认为添加环境​​变量并不是一个好主意,因为它还隐藏了重要的日志,例如布局约束问题以及@AirXygène给出的示例.在模拟器中你也可以点击"CMD + /"打开控制台,它会给你老式的日志.希望Apple能在Xcode中解决这个问题,但是很多人对此感兴趣,看看upvotes的数量;) (7认同)
  • 该解决方案还隐藏了模拟器中的一些重要日志记录.例如,我错过了以下警告"此应用程序已崩溃,因为它试图在没有使用说明的情况下访问隐私敏感数据." 直到我再次启用OS_ACTIVITY_MODE (4认同)
  • 此解决方案将隐藏从Xcode 9开始的所有NSLog.要保留NSLog,请将`disable`替换为`default`. (4认同)
  • 这是我见过的最好的解决方案,希望更多人看到。这个额外的伐木废话让我发疯了!!为解决干杯!! (2认同)
  • 它还隐藏了任何破坏布局约束日志 (2认同)
  • @iDevzilla你在使用macOS Sierra吗?我认为修复可能需要Xcode 8.1*和*Sierra,因为我已经删除了该选项,并且在运行Xcode 8.1时仍然看到过多的日志记录.在El Capitan. (2认同)

cdu*_*uhn 355

在@rustyshelf 的原始推文的基础上,以及来自iDevzilla的图解答案,这是一个解决方案,可以在不禁用设备的NSLog输出的情况下消除模拟器的噪音.

  1. 在Product> Scheme> Edit Scheme ...> Run(Debug)下,将OS_ACTIVITY_MODE环境变量设置为$ {DEBUG_ACTIVITY_MODE},如下所示:

在此输入图像描述

  1. 转到项目构建设置,然后单击+以添加名为DEBUG_ACTIVITY_MODE的用户定义设置.展开此设置并单击Debug旁边的+以添加特定于平台的值.选择下拉列表并将其更改为"Any iOS Simulator".然后将其值设置为"禁用",所以它看起来像这样:

在此输入图像描述

  • 这对我来说不起作用,最高投票的答案也没有.在OS X 10.11.6 El Capitan上使用Xcode 8.2.1.但是,使用OS_ACTIVITY_DT_MODE而不是OS_ACTIVITY_MODE,这个答案和BaseZen的结合起来了.(并且对我来说意外的是,至少"NO"和"禁用"都关闭了猖獗的日志记录.) (18认同)
  • 太糟糕了,这不是公认的答案,太糟糕了,这个答案正在失去投票数.*很多*更好的回答恕我直言,因为它只在模拟器上禁用了OS_ACTIVITY_MODE for DEBUG构建. (7认同)
  • 此解决方案将隐藏从Xcode 9开始的所有NSLog.要保留NSLog,请将`disable`替换为`default`. (7认同)
  • @NSNoob确保env变量中没有空格. (6认同)
  • 同意 - 这可以使NSLog工作. (5认同)
  • @RenniePet,这正是为我做的。谢谢! (3认同)

Bas*_*Zen 84

OS_ACTIVITY_MODE对我不起作用(这可能是因为我错disabledisabled,但不是更自然吗?!?),或者至少没有阻止大量的消息.所以这是对环境变量的真实处理.

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);
}
Run Code Online (Sandbox Code Playgroud)

因此OS_ACTIVITY_DT_MODE,在环境变量中设置为"NO"(在主要答案的Schemes屏幕截图中解释的GUI方法)使它对我有用.

至于NSLog系统消息,错误和您自己的调试的倾销场:无论如何都可能需要真正的日志记录方法,例如https://github.com/fpillet/NSLogger.

要么

喝新的Kool-Aid: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

在大多数情况下,NSLog现在只是os_log的一个垫片.

现在只有引用其他env变量的源才有意义.相当不同的地方,这次来自Apple内部.不确定为什么它们重叠.[ NSLog删除的评论不正确]

[9月22日编辑]:我想知道"发布"和"流"与"调试"有什么不同.资源不足.

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 总是很高兴看到提供原因和背景的答案,而不仅仅是快速修复. (9认同)
  • @Frizlab是的,我在帖子中都提到了这两个。参见“ OR” ...我将os_log非正式地称为新的Kool Aid。 (2认同)

Pet*_*ith 64

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

要阻止Xcode 8 iOS模拟器疯狂记录,请在调试方案中设置环境变量OS_ACTIVITY_MODE = disable.

有效.

  • 如前所述:OS_ACTIVITY_MODE = disable使用NSLog停用所有其他日志记录. (6认同)
  • 此解决方案将隐藏从Xcode 9开始的所有NSLog.要保留NSLog,请将`disable`替换为`default`. (5认同)

Pez*_*Pez 33

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

**编辑8/1/16:这已在Xcode 8 Beta 4(8S188o)发行说明中得到承认,因为问题仍然存在.

Xcode 8 beta 4中的已知问题 - IDE

调试

•在模拟器中调试应用程序时,Xcode Debug Console显示系统框架的额外日志记录.(27331147,26652255)

据推测,这将由通用汽车发布解决.在那之前,耐心虽然不理想,但我正在使用的解决方法是......

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

  • 使用某种特殊字符(例如*或^或!等等)为我的打印日志添加前缀

  • 然后使用控制台窗格右下角的搜索框通过输入我选择的特殊字符来过滤我的控制台日志,以使控制台按预期显示我的打印日志

安慰

  • 刚刚获得Xcode 8 GM,问题仍然存在.很烦人!! (49认同)
  • 刚刚从App Store下载了Xcode Version 8.0(8A218a).问题仍然存在. (8认同)
  • 太荒谬了.还有最终的MAS版本. (4认同)

Ram*_*rma 33

请找到以下步骤.

  1. 选择Product => Scheme => Edit Scheme或使用快捷方式: CMD + <
  2. Run从左侧选择选项.
  3. 在"环境变量"部分,添加变量OS_ACTIVITY_MODE = disable

有关更多信息,请参阅以下GIF表示.

编辑方案

  • 等等......在第二次运行时它起作用了.感谢Gif Video.最好的答案总是在底部! (3认同)
  • 此解决方案将隐藏从Xcode 9开始的所有NSLog.要保留NSLog,请将`disable`替换为`default`. (2认同)
  • @Cœur,你是救世主,每个人都说这是为了禁用,但你给了我最好的答案,非常感谢。 (2认同)

mra*_*iao 23

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

在此输入图像描述

和控制台的输出改变从所有输出调试器输出

在此输入图像描述


小智 14

好的.关于这个似乎有很多骚动,所以我会给你一个方法来坚持它而不使用那个计划技巧.我将专门针对iOS模拟器,但这也可能需要应用于电视模拟器,它位于不同的目录.

引起所有这些问题的问题是位于Xcode目录中的plists.当Sim开始读取plist并打印调试信息时,如果plist指定应记录它们,则会启动一个名为configd_sim的进程.

柱子位于这里:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/Preferences/Logging/Subsystems

如果你正在玩beta版,请注意dir会有所不同.

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

在此输入图像描述

从那里,修改plist以淘汰调试[Level]键/值,这是一个包含"Enable" => "Default"键/值的字典......或者只是简单地删除plist.请注意,由于它们位于Xcode应用程序中,因此您需要是root用户才能执行其中任何一项操作.

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
Run Code Online (Sandbox Code Playgroud)

这给了我一个有问题的plists包含:

{ "DEFAULT-OPTIONS" => { "Level" => { "Enable" => "Default" }}}

祝好运 :]


JAL*_*JAL 13

这与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发行说明


小智 7

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

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

调试

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

  • 我在8.1中仍然收到很多虚假的日志记录.大多数奇怪的socket和tcp连接的东西.别人,还是我呢? (20认同)
  • 我今天刚刚下载了Xcode 8.1(2016年10月31日),仍然看到一些调试日志记录,如此`[MC]从私有效用户设置读取.来自一个空白的新虚拟项目File> New> Project. (3认同)
  • 我甚至在Xcode 8.2.1中也得到它 (2认同)

Jak*_*lář 7

Xcode 10OS_ACTIVITY_MODE中,具有disable(或) 值的变量default也会关闭NSLog无论如何。

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

但最好在这里查看新的os_logAPI 。


Sta*_*low 6

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