【发布时间】:2013-07-13 21:59:23
【问题描述】:
尽管调试器现在已经变得很好,但有时找出应用程序中发生的事情的最佳方法仍然是 ye olde NSLog。当您连接到计算机时,这样做很容易; Xcode 有用地弹出 Log Viewer 面板,然后就可以了。当您离开办公桌时,这样做并不容易,因为您有时必须在测试应用程序时(例如,当您测试 CoreLocation 功能时)。当然,您可以在从测试运行返回后立即打开 Xcode 并检查设备管理器的控制台部分,但是您必须等待,等到您可以返回查看日志时,您会忘记发生了什么你的应用有问题;也很有可能,当您能够做到这一点时,您正在寻找的日志消息已经被遗忘了。
有没有办法检查设备本身的控制台日志?我猜答案是“不,除非你越狱”(IIRC 在越狱领域至少有一个或两个终端应用程序可以用来做这种事情)。不幸的是,越狱不是我的选择。
或者,是否有某种 Objective-C 框架或库或诸如此类的东西来处理日志收集和设备上显示?理想情况下,这将以直接替换NSLog 的形式出现,我可以简单地进行搜索和替换,并将所有出现的NSLog 更改为SomeFancyPantsLoggingTool 或其他任何内容,然后用它来完成。
我正在寻找的那种功能的一个很好的例子可以在播客客户端Downcast 中找到。如果您点击“更多”选项卡,然后点击屏幕底部的版本号字符串,则会向上滑动一个新视图,其中包含累积日志消息的可滚动视图。它甚至有一种简单的方式将所述日志邮寄到支持电子邮件地址。
【问题讨论】:
-
你不能替换你的老
NSLog()。您应该连接到系统日志。man syslog和man syslogd是你的朋友,也可以尝试连接到lockdownd并从中获取系统日志(虽然这是一个私有 API,所以在提交到 AppStore 之前将#ifdef删除。) -
我一般使用自己的记录器。我有一组与 NSLog 和我自己的参数一起使用的定义。由于我想将自己的日志保存在单独的文件中(每天),我只需通过使用“stderr”freopen([pathToFile UTF8String]、“a”、stderr)调用“freopen”将所有日志重定向到新创建的文件。然后,当用户遇到问题并单击我的“联系支持”按钮时,我可以将这些日志发送给自己。
标签: ios objective-c logging nslog