gpt4 book ai didi

Swift:OSLog/os_log 未显示在控制台应用程序中

转载 作者:行者123 更新时间:2023-11-28 07:22:59 26 4
gpt4 key购买 nike

我正在使用 XCode 10.3 构建一个 Swift 5 应用程序。为此,我有一个框架,其中包含一个日志系统的实现(用于调试目的)。此日志系统的默认实现基于 OSLog/os_log。在消费应用程序中使用系统时,控制台应用程序中不会显示任何日志。但是,在放置断点时,我可以看到到达了 os_log 语句(参见下面的代码示例)并且正确的参数被传递给了 os_log 函数。但是,当我在主机应用程序中使用 os_log 或 NSLog 时,它们就会出现。

我已经验证这不是 LogSystem/DefaultLogImplementation 类型的问题,因为所有需要命中的断点都已命中,并且所有单元测试是绿色的。另外,到达并执行了os_log语句,但是没有出现日志。我已经验证所有消息都显示在控制台应用程序中,我已经验证我选择了正确的设备,我已经尝试了多个过滤器(甚至在没有启用过滤器的情况下挖掘所有日志)...

任何人都可以帮助/指出问题所在吗?我目前怀疑 OSLog/os_log 的实现存在错误。

代码示例

应用程序端代码,使用类似于下面提供的示例的代码

class SomeClass {
private let logSystem = LogSystem()

func doSomethingImportant() {
// Do important stuff and log the result
logSystem.debug("Finished process with result \(result)")
}

}

应用使用的框架端代码

public class LogSystem {

private let logImplementation: LogImplementation

init(_ logImplementation: LogImplementation = DefaultLogImplementation()) {
self.logImplementation = logImplementation
}

public func debug(_ message: String) {
logImplementation.log(message, type: .debug) // And some other parameters...
}

public func error(_ message: String) {
// Similar to debug(:)...
}

}

public protocol LogImplementation {
func log(_ message: String, type: LogType, ...other parameters...)
}

public class DefaultLogImplementation: LogImplementation {
func log(_ message: String, type: LogType, ...other parameters...) {
let parsedType = parseLogType(type) // Function that parses LogType to OSLogType
let log = OSLog(subsystem: "my.subsystem.domain", category: "myCategory")
os_log("%{private}@", log: log, type: parsedType, message) // Breakpoint here is reached, but log does not appear in console app (even with debugger attached, which should remove the effect of "%{private}%". Either way, at the very least censored logs should still appear in console app.
}
}

附加信息

swift 版本:5.0

XCode 版本:10.3

目标设备:iOS 12.2 iPhone X模拟器

NSLog 出现在控制台应用程序中:是

在控制台应用程序中选择了正确的设备:是

正确的过滤器:是

更新时间2019-08-16 13:00(阿姆斯特丹时间)

似乎只有 .debug 级别的消息没有出现在控制台应用程序中。当将任何模拟器设备与 OSLog 结合使用时,就会出现此错误。我已经尝试了几个命令来解决这个问题:

sudo 日志配置 --mode level:debug,persist:debug

sudo 日志配置 --subsystem my.reverse.domain.name --mode level:debug,persist:debug

他们都没有解决这个问题。事实上,控制台应用程序中没有显示任何模拟器的调试级别消息(甚至不是来自 iOS 本身)。是的,显示 .info 和 .debug 级别消息的选项已启用。

我尝试通过以下命令专门为模拟器设置日志级别:

xcrun simctl spawn 启动日志配置 --mode level:debug

但这会导致错误:

日志:模拟器无法设置系统模式

最佳答案

在控制台应用程序中,有两个选项可以包含/隐藏调试和信息消息:

enter image description here

关于Swift:OSLog/os_log 未显示在控制台应用程序中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57509909/

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