Logger/os_log 长度限制

问题描述 投票:0回答:1

尝试使用 Logger 将长数组打印到控制台。我注意到有些实体丢失了。意识到这是由于记录器消息末尾被

<…>
切断所致。

官方参考资料中没有关于os_log长度限制的信息。然而我发现 Eskimo 的一篇文章提到它的大小限制为 1kb:

NSLog
位于统一日志记录之上,它对日志记录有限制 任何给定日志条目中动态内容的长度(1024 字节,如果我 记得正确)。

您将如何将更长的消息打印到控制台?不推荐

print
,因为它仅适用于 Xcode 调试器。

swift xcode logging console oslog
1个回答
0
投票

我通过实验验证它似乎被限制在不到 1kb。它不仅仅是控制台应用程序,还包括日志捕获/日志显示的命令行呈现。但 Xcode 控制台不受此限制。

如果您确实需要超过 1kb,您可以将其分成单独的日志消息。

例如,考虑:

import os.log

class ApiManager {
    private let logger = Logger(subsystem: Bundle.main.bundleIdentifier!, category: "ApiManager")

    func perform(_ url: URL) async throws {
        logger.info("\(#function, privacy: .public): \(url, privacy: .public)")
        logger.error("Line 1")
        logger.error("Line 2")
        logger.error("Line 3")
    }
}

FWIW,作为实践问题,我总是使用与进行日志记录的子系统/类型关联的“类别”。下面,我对该类别进行过滤以减少控制台中的噪音。我通常也会过滤“子系统”。

然后,在控制台中查看它时,您可以右键单击一条消息并选择“显示活动 ID”。例如,我首先在控制台中过滤来自“ApiManager”类别的消息。看到三组错误,我可以右键单击其中一组并选择“显示活动 ID”,然后我只看到与该特定活动相关的消息。将范围缩小到给定的活动后,我可以删除“ApiManager”过滤器,然后我会看到与该活动相关的更完整的消息列表,将我的错误消息放在更广泛的上下文中:

animated GIF filtering by activity ID

© www.soinside.com 2019 - 2024. All rights reserved.