- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 Xcode 12/iOS 14 中,OSLog 获得了对字符串插值的支持(耶!)。但是仍然不可能附加 Hook 以轻松登录到其他 channel ,例如 Crashlytics。
所以我想我会做一个简单的包装器并传递参数。然而,关于字符串插值似乎发生了一些神奇的事情。
提供的新 Logger 类,它需要一个 OSLogMessage
作为参数,可以如下使用:
let someVar = "some var"
let logger = Logger(subsystem: "com.my.app", category: "UI")
logger.error("some message")
logger.error("some message with default var: \(someVar)")
logger.error("some message with private var: \(someVar, privacy: .private)")
logger.error("some message with private var: \(someVar, privacy: .private(mask: .hash))")
logger.error("some message with public var: \(someVar, privacy: .public)")
struct MyLogger {
let logger = Logger(subsystem: "com.my.app", category: "UI")
func error(_ message: OSLogMessage) {
logger.error(message)
}
}
相同的签名,但不幸的是,编译器不允许这样做:
ERROR: Argument must be a string interpolation
此外,尝试调用我的结构也会导致一个奇怪的特定编译器错误:
let logger = MyLogger()
let value = "value"
logger.error("Some log message \(value, privacy: .public)")
产量:
String interpolation cannot be used in this context; if you are calling an os_log function, try a different overload
直接调用
os_log(_: OSLogMessage)
而不是新的结构给出了相同的结果。
最佳答案
日志 API 使用特殊的编译器功能在编译时评估隐私级别。正如诊断所说,您必须使用“OSLogPrivacy”的静态(即在编译时已知)方法或属性;它不能是在运行时评估的变量。这意味着如果不使用编译器内部功能,您将无法为这些 API 创建自己的包装器。
Apple Forums
关于swift - Xcode 12 和 OSLog (os.log) : wrapping OSLogMessage causes compile error: Argument must be a string interpolation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62675874/
我有以下包装 UserDefaults 的方法,以便我可以以类型安全的方式与 API 交互。 public func item(forKey key: Key) -> T? { var ite
我注意到我的 NSLog(我也尝试过使用 os_log)语句在控制台应用程序中显示不一致。 下面是一些在我的应用程序启动时运行的代码。 func application(_ applicati
对于以下函数: let authenticationLogger = OSLog(subsystem: "com.Company.AppNameQA" ?? "Empty bundleIdentifi
我正在使用 XCode 10.3 构建一个 Swift 5 应用程序。为此,我有一个框架,其中包含一个日志系统的实现(用于调试目的)。此日志系统的默认实现基于 OSLog/os_log。在消费应用程序
我正在使用 Apple 的 os.log 框架创建日志。我只是在制作日志: os_log("Update: Lat: %{public}f | Long: %{private}f | Remaini
如何使用 iOS OSLog在 Xamarin.iOS 中? 我确实成功地使用了 NSLog,如下所示,但是我看不到使用 NSLog 设置子系统(到包标识符)的方法,以便我可以使用它来过滤 Conso
现在,如果我更改 stddr 的路径,那么我的日志将不再发送到控制台,而只会发送到日志文件。 我想知道是否有一种简单的方法可以同时拥有它们? 另外,我是否可以将 OSLog 生成的日志传递给 Cras
我想在 Playground 中测试新的 iOS 14 Logger 但我发现了下一个问题: // MyLog.playground import os let logger = Logger() l
在 Xcode 12/iOS 14 中,OSLog 获得了对字符串插值的支持(耶!)。但是仍然不可能附加 Hook 以轻松登录到其他 channel ,例如 Crashlytics。 所以我想我会做一
我是一名优秀的程序员,十分优秀!