Logger/os_log长度限制问题:如何打印超长日志内容?
解决Logger打印超长内容被截断的方案
方法1:拆分内容分段打印
由于统一日志单条动态内容限制为1024字节,最直接的方式是将超长内容拆分为多个小片段,逐个用Logger输出。比如针对数组,可以按固定数量的元素拆分,或者将数组转为字符串后按字节长度分割:
import os.log let logger = Logger(subsystem: "com.your.app", category: "debug") func logLongArray<T>(_ array: [T]) { let chunkSize = 20 // 根据元素长度调整,确保单条日志不超1024字节 for i in stride(from: 0, to: array.count, by: chunkSize) { let end = min(i + chunkSize, array.count) let chunk = array[i..<end] logger.debug("Array chunk \(i/chunkSize + 1): \(chunk)") } } // 使用示例 let longArray = Array(1...1000) logLongArray(longArray)
方法2:写入本地文件后记录文件路径
如果需要完整保留超长内容,可以将其写入App的沙盒目录,再用Logger打印文件路径,后续可通过Xcode的"Devices and Simulators"查看文件内容:
import os.log let logger = Logger(subsystem: "com.your.app", category: "file-log") func logLongContentToFile(_ content: String, fileName: String = "long_log.txt") { guard let documentsDir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else { logger.error("Failed to get documents directory") return } let fileURL = documentsDir.appendingPathComponent(fileName) do { try content.write(to: fileURL, atomically: true, encoding: .utf8) logger.debug("Long content saved to: \(fileURL.path)") } catch { logger.error("Failed to write to file: \(error.localizedDescription)") } } // 使用示例 let longString = String(repeating: "Test content ", count: 100) logLongContentToFile(longString)
方法3:封装自动拆分的日志工具
可以封装一个Logger的扩展,自动检测内容长度并拆分,对外保持简洁的调用方式:
import os.log extension Logger { func logLongMessage(_ message: String, label: String = "long-message") { let maxLength = 1000 // 预留部分字节避免边界问题 var startIndex = message.startIndex while startIndex < message.endIndex { let endIndex = message.index(startIndex, offsetBy: maxLength, limitedBy: message.endIndex) ?? message.endIndex let chunk = String(message[startIndex..<endIndex]) self.debug("\(label): \(chunk)") startIndex = endIndex } } } // 使用示例 let logger = Logger(subsystem: "com.your.app", category: "custom") let veryLongText = "..." // 超长内容 logger.logLongMessage(veryLongText)
内容的提问来源于stack exchange,提问作者kelin
相关产品推荐
相关产品推荐

