You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 21:27:41