我已经在iOS应用程序中设置了通过OSLog进行日志记录,并添加了一个按钮来使用OSLogStore导出日志:
extension OSLog {
private static let subsystem = Bundle.main.bundleIdentifier!
@available(iOS 15.0, *)
static func getLogs(inLast: TimeInterval) -> [OSLogEntryLog]? {
guard let store = try? OSLogStore(scope: .currentProcessIdentifier) else { return nil }
let startTime = store.position(timeIntervalSinceEnd: -inLast)
guard let entries = try? store.getEntries(at: startTime).compactMap({ $0 as? OSLogEntryLog }).filter({ $0.subsystem == subsystem }) else { return nil }
return entries
}
}
这在本地测试时工作正常,即使在发布版本中也会导出所有日志。但是,当我们的团队通过TestFlight测试构建时,不会导出调试日志。是否有方法导出所有日志,包括调试日志?
2条答案
按热度按时间6yoyoihd1#
您需要将其添加到
Info.plist
另外,您可能需要添加
到同一个字典中,而不是编辑所有参数。
最后,不要在
getEntries()
结果上使用.filter
,它非常慢。相反,将matching
重载与NSPredicate
一起使用,例如。bfnvny8b2#
Claus Jørgensen的回答是有效的。人们可以将设置添加到Info.plist中,并且调试级别消息会出现在iOS上的OSLogStore中。通过阅读Apple的文档,我假设这些东西的配置只有在macOS中才可能。
如果它能帮助任何人:有关Info.plist的一些信息在
man 5 os_log
中:特定于应用程序的配置文件位于应用程序的Info.plist文件中的OSLogPreferences字典中。此字典中的键对应于子系统名称,其值是子系统字典。
我怀疑,从OSLogStore无法访问调试级别消息-至少目前iOS 17 / Xcode 15是这样。来自Apple的文档([Generating Log Messages from Your Code][1]):
通常,系统只在内存中存储调试和信息消息,...
以及:
日志级别的严重性会影响系统记录信息的速度。由于系统只将它们存储在内存中,因此日志的开销非常低。
从在iOS上玩OSLogStore时可以看到的内容来看,OSLogStore似乎不包括调试消息。