gpt4 book ai didi

ios - 对于某些类别或子系统,如何禁用os_log调试消息?

转载 作者:行者123 更新时间:2023-12-01 21:56:20 26 4
gpt4 key购买 nike

我在iOS应用中使用统一日志记录API。

import os
private let log = OSLog(subsystem: "", category: "ThisComponent")
...
os_log(.debug, log:log, "Blah blah blah: %@", str)

运行我的应用程序时,这些调试日志调用将显示在Xcode控制台中。一旦我不再关注某个特定组件,就不再希望看到其大量的调试级别日志消息。有没有办法用环境变量或类似的方法禁用它们?还是我需要通过注释掉它们,或者定义自己的 Bool变量并添加 if检查来更改代码:
if isDebugLogging {
os_log(.debug, log:log, ...)
}

docs提到能够针对macOS做到这一点,但我特别询问的是iOS。

我不想将其全部关闭。为此,我需要一种按子系统或类别将其关闭的方法。

最佳答案

您通过指定一些全局OSLog对象来应用os_log。只需用OSLog.disabled替换该对象,现在通过它发送的消息将不会发送到任何地方。

例:

let _activeLog = OSLog(subsystem: "hey", category: "ho")
let _inactiveLog = OSLog.disabled
var heyHoEnabled = true
var myLog : OSLog { heyHoEnabled ? _activeLog : _inactiveLog }

所以现在:
    os_log(.debug, log: myLog, "hey") // logged
os_log(.debug, log: myLog, "ho") // logged
self.heyHoEnabled = false
os_log(.debug, log: myLog, "hey nonny no") // not logged

但是,假设您仍然要发送消息;你只是看不到他们。在控制台级别,没有办法说“不向我显示某些消息”。您可以过滤控制台,但只能过滤所需的内容,而不过滤不想要的内容。

顺便说一句, os_log消息进入Xcode控制台是一个辅助功能。它们出现的主要位置是控制台应用程序。并且可以过滤控制台消息,以便仅包括所需的子系统或类别。这是一个非常强大的过滤器,比Xcode控制台更强大,更精确。

因此,如果所有控制台消息都是带有不同子系统或类别的 os_log消息,则可以使用控制台应用程序以非常强大的方式进行过滤。

关于ios - 对于某些类别或子系统,如何禁用os_log调试消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61179675/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com