Dan*_*lan 8 ios swift oslog swiftui ios15
首先,重要的是要知道OSLogStore 在 iOS 中不起作用就在 4 个月前,由于那是最近的事,而且文档又非常稀少,一年前可能正确的内容今天可能并不正确。
\n这是我的问题的一些背景(几乎是从这个 reddit 帖子中盗来的):
\n\n\n我开发的开源应用程序大约有 1000 个用户,用户时不时会报告一些奇怪的行为。
\n该应用程序使用[记录器 ] 来记录重要事件...是否可以使用远程日志记录服务,以便我可以获取此信息并为用户解决问题?
\n
我只关心是否有统一的日志系统是否有解决这个问题的方法。假设我能够与具有“奇怪行为”的用户交谈,并且他们不是技术人员。
\n我得到了一些提示,表明 OSLogStore 可能是一种获取远程日志的方法,但官方文档太少了,我无法判断。具体来说,init(url:)看起来很有趣,但也许它只接受file://协议或其他东西。
日志记录文档说它可以用于“当您无法将调试器附加到应用程序时,例如当您\xe2\x80\x99在用户\xe2\x80\x99s机器上诊断问题时”,但没有任何地方说这个怎么做。
\n回复:@RobNapier 对原始帖子的评论说,\xe2\x80\x9c唯一的问题是你是否可以从远程设备上注销......甚至这也相当棘手。\xe2\x80\x9d 我我开始认为OSLogStore只获取本地日志,但这使您能够将它们发送到任何地方,或者用它们做任何您想做的事情,真的。
现在,这OSLogStore适用于 iOS,您可以在应用程序中放置一个标记为“将日志发送到开发人员”的按钮,单击该按钮会将日志发送到服务器上的自定义端点。这需要两个步骤:
获取本地日志。
\n\n\n\n通过 OSLogStore,Apple 添加了一个 API 来以编程方式访问日志存档。它允许访问 OSLogEntryLog,其中包含您可能需要的所有日志信息。...让\xe2\x80\x99s 看看它是如何工作的:
\n
func getLogEntries() throws -> [OSLogEntryLog] {\n let subsystem = Bundle.main.bundleIdentifier!\n // Open the log store.\n let logStore = try OSLogStore(scope: .currentProcessIdentifier)\n\n // Get all the logs from the last hour.\n let oneHourAgo = logStore.position(date: Date().addingTimeInterval(-3600))\n\n // Fetch log objects.\n let allEntries = try logStore.getEntries(at: oneHourAgo)\n\n // Filter the log to be relevant for our specific subsystem\n // and remove other elements (signposts, etc).\n return allEntries\n .compactMap { $0 as? OSLogEntryLog }\n .filter { $0.subsystem == subsystem }\n }\nRun Code Online (Sandbox Code Playgroud)\n将它们发送到服务器上的自定义端点。通过代码库中的该函数,我认为您可以像这样使用它:
\n let logs = getLogEntries();\n sendLogsToServer(deviceId, appVersion, ..., logs); // this is your implementation\nRun Code Online (Sandbox Code Playgroud)\n让我犹豫的一件事是 @RobNapier 说“从远程设备注销......是相当棘手的”。这让我觉得我缺少了一些东西。希望@RobNapier 能指出我想法中的缺陷。
\n| 归档时间: |
|
| 查看次数: |
3291 次 |
| 最近记录: |