【问题标题】:Reduce debug output from CoreData?减少 CoreData 的调试输出?
【发布时间】:2020-01-14 06:10:08
【问题描述】:

我正在开发一个使用 CoreData 的 iOS/macOS 项目。它工作正常,但它会向控制台输出大量调试信息。这使得控制台无法使用,因为我的打印语句隐藏在所有与 CoreData 相关的东西中。

我有一个非常简单的 CoreData 设置,可以获取一些数据,所以这些不是错误,只是一般的事件日志。我在使用过 CoreData 的其他项目中也有相同的结果。

有什么方法可以减少/删除控制台的日志记录?

一些样本数据(all data here):

CoreData: warning: CoreData+CloudKit: -[NSCloudKitMirroringDelegate _

performExportWithRequest:]_block_invoke_2(946): Finished export: <PFCloudKitExporter: 0x2838bd840>
CoreData: CloudKit: CoreData+CloudKit: -[NSCloudKitMirroringDelegate _finishedRequest:withResult:](2102): Finished request: <NSCloudKitMirroringExportRequest: 0x2823bbb40> DC26CDEE-0AB6-42CD-81E5-996E7E7727F9 with result: <NSCloudKitMirroringResult: 0x282dfcfa0> success: 1 madeChanges: 0 error: (null)
CoreData: CloudKit: CoreData+CloudKit: -[NSCloudKitMirroringDelegate _scheduleAutomatedExportWithLabel:activity:completionHandler:]_block_invoke(2170): <NSCloudKitMirroringDelegate: 0x281ae4580> - Finished automatic export - AppActivationExport - with result: <NSCloudKitMirroringResult: 0x282dfcfa0> success: 1 madeChanges: 0 error: (null)
CoreData: warning: CoreData+CloudKit: -[NSCloudKitMirroringDelegate finishedAutomatedRequestWithResult:](2115): Finished request '<NSCloudKitMirroringExportRequest: 0x2823bbb40> DC26CDEE-0AB6-42CD-81E5-996E7E7727F9' with result: <NSCloudKitMirroringResult: 0x282dfcfa0> success: 1 madeChanges: 0 error: (null)
CoreData: CloudKit: CoreData+CloudKit: -[NSCloudKitMirroringDelegate checkAndExecuteNextRequest](2073): <NSCloudKitMirroringDelegate: 0x281ae4580>: Checking for pending requests.
CoreData: CloudKit: CoreData+CloudKit: -[NSCloudKitMirroringDelegate checkAndExecuteNextRequest]_block_invoke(2088): <NSCloudKitMirroringDelegate: 0x281ae4580>: No more requests to execute.
CoreData: CloudKit: CoreData+CloudKit: -[NSCloudKitMirroringDelegate _scheduleAutomatedImportWithLabel:activity:completionHandler:](2140): <NSCloudKitMirroringDelegate: 0x281ae4580> - Beginning automated import - ImportActivity - in response to activity:
<CKSchedulerActivity: 0x280ec8f00; additionalXPCActivityCriteria={
    Priority = Utility;
}

【问题讨论】:

  • 我已经添加了,它并没有改变任何东西。 ://
  • @eivindml 你有没有找到好的解决方案?
  • @MeaganS。不,不幸的是。 :/ 我已经尝试了这里提到的所有解决方案。我还尝试将所有 CoreData 逻辑移动到一个框架中,但它仍然会记录所有内容。很想知道你是否想出办法。 :) 添加赏金以引起更多关注。
  • 你有复制路径吗?
  • @J.Doe 我很确定如果您创建一个空项目并检查是否包含基本的 CoreData/CloudKit 选项,将实体添加到模型中,然后读/写一些东西,就会发生这种情况。

标签: ios swift macos core-data


【解决方案1】:

尝试将这些添加为启动参数,看看是否有帮助

-com.apple.CoreData.SQLDebug 0
-com.apple.CoreData.Logging.stderr 0               
-com.apple.CoreData.ConcurrencyDebug 0
-com.apple.CoreData.MigrationDebug 0

编辑1: 我在 Apple 文档中找到了这个: 选择产品 > 方案 > 编辑方案。选择一个操作,例如运行,然后选择参数选项卡。将带有调试级别值的 com.apple.CoreData.CloudKitDebug 用户默认设置作为参数传递给应用程序。

 -com.apple.CoreData.CloudKitDebug 0

将最后一个添加为启动参数,您应该会实现您想要的。

link to the AppleDocs 检查名为使用 CloudKit 在核心数据中调试错误

的部分

【讨论】:

  • 非常感谢!这终于奏效了,它也给了我更多的控制权,以便调试实际上是有用的。 ?
  • 谢谢,我不得不在 CloudKit 和 CoreData 的大量输出中搜索我真正需要记录的内容,这让我发疯了
  • 这适用于 iOS,但由于某些原因,在运行 watchOS 应用程序时会不断显示日志(将启动参数传递给手表应用程序)。
  • 我曾尝试过 Apple 文档中的 .CloudKitDebug,但没有成功,但最终使用了所有 5 个参数
  • 很好的答案。对我来说就像一个魅力 - Xcode 12.x,macOS11。
【解决方案2】:

我遇到了同样的问题。
这将禁用 CoreData 调试输出:
在“启动时传递的参数”中:
-com.apple.CoreData.Logging.stderr 0
为我工作。

【讨论】:

  • 接受的答案对我不起作用,但确实如此。谢谢!
【解决方案3】:

在 Xcode 中按照以下步骤操作:

  1. 产品
  2. 方案
  3. 编辑方案...
  4. 选择左侧构建应用程序的方式(我猜是运行)

我猜你会在“Arguments pass on launch”中看到-com.apple.CoreData.SQLDebug。如果您看到,请关闭它。如果没有看到,请添加:

-com.apple.CoreData.SQLDebug 1

值和描述:

  1. SQL 语句、行数和执行时间
  2. 绑定值和 未列出完整的 NSSQLiteStatement 的截断版本 托管对象列表。
  3. 返回的托管对象列表 询问。这些对象没有错误地进入内存,因此 仅输出受管对象 ID。
  4. SQLite 解释查询计划

来自http://blog.raymccrae.scot/2017/12/core-data-sqldebug-log-levels.html

【讨论】:

  • 这是我几年前检查的最佳答案。我发现即使在最小的日志记录设置下输出也过多,但对于 OP 来说可能已经足够了。
  • 不幸的是,这只会让事情变得更糟。它显示相同的 CoreData 日志,但也使用 SQLite 日志数据。 ://
猜你喜欢
  • 2017-08-17
  • 2019-04-18
  • 1970-01-01
  • 2019-07-23
  • 2013-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多