如何打开/查看存储在设备上的 iOS OSLogs?
Posted
技术标签:
【中文标题】如何打开/查看存储在设备上的 iOS OSLogs?【英文标题】:How can I open/view iOS OSLogs stored on device? 【发布时间】:2018-01-03 08:41:20 【问题描述】:我正在使用 Apple 的 os.log
框架创建日志。我只是在制作这样的日志:
os_log("Update: Lat: %publicf | Long: %privatef | RemainingTime: %publicf ", log: log, type: .default, location.coordinate.latitude, location.coordinate.longitude, UIApplication.shared.backgroundTimeRemaining).
我确实在控制台和调试器中看到了日志。
我已阅读this 并且我能够成功下载容器(只是不确定容器是否包含我要查找的内容,或者这是否是查看的正确位置)。然后我点击显示包:
但在那之后我只看到:
我查看了所有文件。这些文件只包含如下数字:
我应该做一些额外的事情还是我找错地方了?
EDIT1:在日航的建议之后:
我查看了(文档、库、tmp)。有plist
和ktx
文件。和function.data
& map.data
文件。
我查看了这些文件:
还有这些文件:
我尝试使用控制台打开它们,但得到如下图所示的乱码结果:
EDIT2:
所以首先我没有权限打开/var/db/diagnostics
,我必须打开sudo bash
。然后我做了cd /var/db/diagnostics
并看到了这些文件。
Events
FaultsAndErrors
Oversize
SpecialHandling
StateDumps
TTL
logdata.Persistent.20170724T212501.tracev3
logdata.Persistent.20170725T015616.tracev3
logdata.Persistent.20170725T134017.tracev3
logdata.Persistent.20170725T171020.tracev3
logdata.Persistent.20170725T213354.tracev3
logdata.Persistent.20170726T002702.tracev3
logdata.Persistent.20170726T144412.tracev3
logdata.Persistent.20170726T202128.tracev3
logdata.Persistent.20170727T021506.tracev3
logdata.Persistent.20170727T033929.tracev3
logdata.Persistent.20170727T075325.tracev3
logdata.Persistent.20170727T145233.tracev3
logdata.statistics.0.txt
logdata.statistics.1.txt
shutdown.log
然后我做了open -a console logdata.Persistent.20170725T015616.tracev3
(我也尝试了其他.tracev3
文件),但是控制台刚刚打开并开始实时跟踪,就像我刚刚正常打开控制台一样......
【问题讨论】:
【参考方案1】:您没有在问题中指定 ios、macOS 或 tvOS,因此我的答案在所有平台上保持通用。
评论WWDC 2016 - Session 721 - Unified Logging and Activity Tracing。
记录数据以一种新的压缩二进制格式(.tracev3
或.logarchive
文件)存储,这就是那些“数字”。您必须使用 Console.app 或 log
命令行工具来打开这些文件。
您在错误的位置查找日志文件。来自会议视频:
这些文件现在存储在 /var/db/diagnostics 下,其他支持文件则存储在 /var/db/uuidtext 中。有新的工具可以访问这些数据,有一个新的控制台,一个新的日志命令行工具,您必须记住的一件事是因为数据现在以二进制格式存储,您必须使用新工具才能访问它。因此,您不再需要使用我们的工具来浏览日志。
还有另一种新类型的文件 .logarchive,用于日志数据的可移植性。本质上,.logarchive 是来自 /var/db/diagnostics 的信息集合,您将 uuidtext 收集到一个文件中,该文件更容易传输到电子邮件、附加到错误报告等。
如果您将 stdout 或 stderr 重定向到文件(例如 this example 中的代码),它应该位于应用程序沙箱的 Documents 目录(或您指定的任何目录)中。在 iOS 和 tvOS 上,最终用户通常无法使用写入 /var/db/diagnostics 的日志。
【讨论】:
@Honey 这同样适用于任何平台。尝试在 Console.app 中打开这些文件,看看您是否可以阅读它们。 @Honey 什么?这些不是日志文件,看起来它们是 3D 纹理文件或金属支持文件。你肯定找错地方了。 @Honey 你看过我在回答中提供的链接吗?日志目录就在那里。我将其添加到我的问题中。 好的,所以我认为我没有正确执行下载文件所需的步骤,我猜 1. 我必须 this 在我的文档目录中创建一个日志文件,对吗? 2.在Xcode管理器>>点击设备>>点击齿轮按钮>>下载容器。对吗? @Honey 不,容器目录不是/var/db/diagnostics
。【参考方案2】:
选项A:无需任何特定设置即可远程检索日志。
触发sysdianose。 使用 Airdrop 并将系统诊断分享到您的 mac 取消归档 sysdiagnose 文件。它看起来像这样: 用 Console.app 打开system_logs.logarchive
就好像您已连接到 Console.app。您可以按子系统、日志级别、类别和时间进行过滤。它看起来像这样:
注意:搜索和过滤速度很慢。有时需要 2 分钟。如果您过滤掉您不关心的日期,这可能会有所帮助。您可以使用底部的文件管理器来做到这一点。 您必须等到右下角的加载存档微调器完成加载
选项B:重定向它们以存储在您的应用沙盒中
在遵循this 回答的建议后,我能够将日志重定向到我的应用沙箱的文档目录中,然后我可以使用this 回答下载我的容器/沙箱。
点击显示包内容后,我得到了这个:
我使用控制台打开了日志文件,得到的结果是:
经度应该显示为private
,但因为我让它通过 Xcode 即调试模式运行,该字段仍然呈现为公共。
【讨论】:
有用的补充。我肯定不会想到的! @Honey 虽然使用freopen
可以帮助我们将所有日志从控制台导航到特定的文件路径,但它仅在我们使用XCode 进行调试时才有效。如果只运行应用程序,输出文件将为空...以上是关于如何打开/查看存储在设备上的 iOS OSLogs?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 iOS 中点击 Facebook 上的新闻源时在设备中打开我的应用程序