如何打开/查看存储在设备上的 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)。有plistktx 文件。和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 上的新闻源时在设备中打开我的应用程序

如何将每帧数据存储在可以通过Matlab打开的iOS电影文件中?

怎么查电脑上的共享文件的IP地址

在 PC 上查看 iOS 应用原始存储数据

XE5 iOS 应用程序 - 从本地存储打开 PDF

iOS 8 AVFoundation - 如何在有能力的设备上启用视频稳定功能