iOS - 应用程序日志测试和生产代码

时间:2012-11-30 12:02:12

标签: objective-c ios logging flurry

当我测试我的应用程序时,我正在做一堆日志记录,这对于获取有关变量状态的信息非常有用。

但是我已经读过你应该在生产代码中稀疏地使用日志记录(因为它可能会降低你的应用程序速度)。但我现在的问题是:如果我的应用程序正在生产中并且人们正在使用它,那么每当发生崩溃(上帝禁止)时,如果我删除了日志记录语句,我将如何解释崩溃信息?那么我想我只能用堆栈跟踪来解释?

这是否意味着我应该只在生产代码中留下记录?在哪里解释发生的事情真的很重要?

此外,日志记录报告将如何与崩溃报告相关联?他们会合并吗?我正在考虑使用Flurry作为分析和崩溃报告......

2 个答案:

答案 0 :(得分:2)

您绝对应该在已发布的应用中包含大量日志记录。正如您所怀疑的那样,它可以在调试时极大地帮助您,如果您确保您的日志消息措辞合理,合理不言自明并包含所有相关详细信息,它甚至可以帮助您的高级用户自行调试。

良好的日志系统有很多方面。有一些常见的模式往往很好用(虽然在iOS上,有些应用程序比其他模式更多):

  1. 按严重程度区分日志。例如,错误,警告,信息,调试。作为另一个例子,Syslog做到了这一点。除了帮助您首先关注更严重的问题之外,您还可以设置“信息性”发布版本的最低级别,从而排除更详细的调试版本,同时保留大部分您需要的东西。出问题。通过这种方式,您可以删除可能非常冗长或频繁的日志消息(因此可能会降低您的应用程序的速度),但请留下重要消息。
  2. 允许在运行时配置日志记录级别(通常通过命令行标志完成,但显然不在iOS上)。例如,您可以默认情况下仅显示警告和错误,但可以选择通过标记展开。
  3. 在所有日志消息中包含文件名和行号,至少在调试版本中是这样。您可能对在发布版本中包含文件名有所保留,但至少包括行号 - 这将有助于确保您正在查看正确的代码来调试时间;您可能(意外或有意)在同一文件中的多个地方都有类似的日志语句。
  4. 以简明的英语编写您的日志消息,具有良好的语法和最小的缩写,并包含所有相关变量的值。如果出现错误或警告,还应包括有关条件后果的声明。例如“无法连接到某个服务器:1234 - 错误-18(ETIMEOUT)。无法确定是否有可用的应用程序更新。”。
  5. 最大限度地减少日志中的用户敏感数据,并且非常小心对包含它的任何日志执行的操作。永远不要记录密码或那种性质的东西 - 甚至不包括诸如长度或哈希之类的附属东西。请注意,即使是像他们提供的网站地址那样看起来很温和的东西也可能被认为是敏感的(他们可能不希望知道他们经常使用www.lumberjacksandpressedwildflowers.com)。如果您对这些日志进行任何类型的传输,这一点尤其重要 - 您需要采用SSL等。
  6. 您可以从预先构建的日志系统中获得许多这些功能,例如: CocoaLumberjackNSLogger(或both)。毫无疑问还有其他人。

答案 1 :(得分:1)

据我所知,处理问题的最佳选择之一是Crashalitics。 它是一个完全集成,免费且易于使用的崩溃报告系统。 祝你好运!