Swift:OSLog / os_log未显示在控制台应用中
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Swift:OSLog / os_log未显示在控制台应用中相关的知识,希望对你有一定的参考价值。
我正在使用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.
其他信息
快速版本:5.0
XCode版本:10.3
目标设备:ios 12.2 iPhone X模拟器
NSLog出现在控制台应用程序中:是
在控制台应用中选择正确的设备:是
正确的过滤器:是
更新2019-08-16 13:00(阿姆斯特丹时间)
[看来,.debug级消息未出现在控制台应用程序中。当将任何模拟器设备与OSLog结合使用时,会发生此错误。我已经尝试了几个命令来解决此问题:
sudo log config --mode level:debug,persist:debug
sudo log config --subsystem my.reverse.domain.name --mode level:debug,persist:debug
他们都没有解决此问题。实际上,控制台应用程序中没有显示模拟器的任何调试级别消息(甚至不是来自iOS本身)。是的,已启用显示.info和.debug级消息的选项。
我尝试通过以下命令专门设置模拟器的日志级别:
xcrun simctl spawn booted log config --mode level:debug
但是这会导致错误:
log: Simulator unable to set system mode
我已经与Apple DTS工程师进行过交谈,这是一个已知问题,无法使用模拟器查看调试消息(也在Xcode 11中:打开反馈
以上是关于Swift:OSLog / os_log未显示在控制台应用中的主要内容,如果未能解决你的问题,请参考以下文章