1

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

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

这是否意味着我应该只在对我解释发生的事情非常重要的地方才可以登录生产代码?

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

4

2 回答 2

2

您绝对应该在已发布的应用程序中包含大量日志记录。正如您所怀疑的,它可以在调试时为您提供极大的帮助,如果您确保您的日志消息措辞恰当、不言自明并包含所有相关细节,它甚至可以帮助您的高级用户进行自我调试。

一个好的日志系统有很多方面。有一些常见的模式通常很好遵循(尽管在 iOS 上,有些模式比其他模式更适用):

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

您可以从预先构建的日志系统中获得很多这些功能,例如CocoaLumberjackNSLogger(或两者兼有)。毫无疑问还有其他人。

于 2012-11-30T15:32:41.553 回答
1

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

于 2012-11-30T13:28:34.970 回答