如何在运行时将 iOS 中的设备日志捕获到 iPhone 的文档目录中的文件中?
How to capture Device Logs in iOS during Runtime into a file in Documents Directory from iPhone?
我的要求是在 iOS 中的应用程序运行期间将所有调试日志捕获到一个文件中。这样做的基本原因是为了了解我的应用程序在不同网络中 VOIP 呼叫的行为。我们想要了解 5G 网络中的呼叫行为,因为我们没有规定来测试 5G 网络中的行为。我们的 SDK 可以记录行为。我知道通过将开发设备连接到 Xcode 来捕获开发设备的日志,但我需要对生产中的设备执行相同的操作。我想提供一个选项,将这些日志邮寄到邮件 ID。有办法吗?任何帮助将不胜感激。
有几个选项可以从生产设备获取日志信息,但它们都有缺点。
1。系统诊断
用户必须手动触发系统诊断,然后在设置中导航到分析数据,找到相应的文件并以某种方式将其发送给您。它相当大(数百 MB),但您会在里面找到相应的 logarchive
并可以在控制台应用程序中打开它或使用 log
命令
2。等待 iOS 14(也许)
在macOS上,OSLog框架包含通过OSLogStore
收集日志信息的手段;在 iOS 13 beta 中,这也可用,但最终已从最终版本中删除。也许Apple会把它放在下一个iOS
3。使用第三方工具
有几个第 3 方日志工具可用,看看 SwiftyBeaver、SwiftLog、CocoaLumberjack 或其他人。
4。自带
你也可以在你的应用程序中实现一些基本的日志记录,将信息写入文件,然后让用户通过电子邮件将其发送给你(或通过 https 传输,但我宁愿将此通知用户) .有趣的是,我正准备编写一些小帮手 类,因为我不想要所有这些 3rd-party-cloud-logging。像这样:
@IBAction func doAction(_ sender: Any) {
pEnter(); defer { pLeave() }
// ...
let dateString = " ... "
traceError("Illegal init date: \(dateString)")
}
/* ... */
#if DEBUG
func pEnter(file: String = #file, line: Int = #line, function: String = #function) {
FunctionCallTracker.instance.enter(file: file, line: line, function: function)
}
func pLeave(file: String = #file, line: Int = #line, function: String = #function) {
FunctionCallTracker.instance.leave(file: file, line: line, function: function)
}
func traceError(_ text: @autoclosure @escaping()->String,
error:Error? = nil,
file: String = #file,
function: String = #function,
line: Int = #line) {
/* ... */
}
#else
@inline(__always) func traceFile(_ text: @autoclosure @escaping()->String) {}
@inline(__always) func pEnter() {}
@inline(__always) func pLeave() {}
#endif
如果你有兴趣,我可以在几周内完成后更新给你。
我的要求是在 iOS 中的应用程序运行期间将所有调试日志捕获到一个文件中。这样做的基本原因是为了了解我的应用程序在不同网络中 VOIP 呼叫的行为。我们想要了解 5G 网络中的呼叫行为,因为我们没有规定来测试 5G 网络中的行为。我们的 SDK 可以记录行为。我知道通过将开发设备连接到 Xcode 来捕获开发设备的日志,但我需要对生产中的设备执行相同的操作。我想提供一个选项,将这些日志邮寄到邮件 ID。有办法吗?任何帮助将不胜感激。
有几个选项可以从生产设备获取日志信息,但它们都有缺点。
1。系统诊断
用户必须手动触发系统诊断,然后在设置中导航到分析数据,找到相应的文件并以某种方式将其发送给您。它相当大(数百 MB),但您会在里面找到相应的 logarchive
并可以在控制台应用程序中打开它或使用 log
命令
2。等待 iOS 14(也许)
在macOS上,OSLog框架包含通过OSLogStore
收集日志信息的手段;在 iOS 13 beta 中,这也可用,但最终已从最终版本中删除。也许Apple会把它放在下一个iOS
3。使用第三方工具
有几个第 3 方日志工具可用,看看 SwiftyBeaver、SwiftLog、CocoaLumberjack 或其他人。
4。自带
你也可以在你的应用程序中实现一些基本的日志记录,将信息写入文件,然后让用户通过电子邮件将其发送给你(或通过 https 传输,但我宁愿将此通知用户) .有趣的是,我正准备编写一些小帮手 类,因为我不想要所有这些 3rd-party-cloud-logging。像这样:
@IBAction func doAction(_ sender: Any) {
pEnter(); defer { pLeave() }
// ...
let dateString = " ... "
traceError("Illegal init date: \(dateString)")
}
/* ... */
#if DEBUG
func pEnter(file: String = #file, line: Int = #line, function: String = #function) {
FunctionCallTracker.instance.enter(file: file, line: line, function: function)
}
func pLeave(file: String = #file, line: Int = #line, function: String = #function) {
FunctionCallTracker.instance.leave(file: file, line: line, function: function)
}
func traceError(_ text: @autoclosure @escaping()->String,
error:Error? = nil,
file: String = #file,
function: String = #function,
line: Int = #line) {
/* ... */
}
#else
@inline(__always) func traceFile(_ text: @autoclosure @escaping()->String) {}
@inline(__always) func pEnter() {}
@inline(__always) func pLeave() {}
#endif
如果你有兴趣,我可以在几周内完成后更新给你。