os_log:Console.app和`log stream`中整数的意外值

时间:2016-09-30 22:53:21

标签: ios swift macos logging foundation

代码(Swift 3):

os_log("State changed: from %d to %d", 1, 2)

Xcode 8 (调试区域控制台):

2016-10-01 00:38:55.903298 AUHost[82455:1512026] State changed: from 1 to 2

终端(日志流):

2016-10-01 00:38:54.880763+0200 0x17125a Default 0x8000000000022d5e 82455 AUHost: State changed: from 1 to 1718550530

Console.app

State changed: from 1 to 1718550530

为什么 Console.app 和命令日志流显示意外值 1718550530 而不是 2

谢谢!

更新

使用偶数个参数时观察到意外行为:

os_log("View loaded: %d", 1)
os_log("View loaded: %d => %d", 1, 2)
os_log("View loaded: %d => %d => %d", 1, 2, 3)
os_log("View loaded: %d => %d => %d => %d", 1, 2, 3, 4)
os_log("View loaded: %d => %d => %d => %d => %d", 1, 2, 3, 4, 5)

输出:

View loaded: 1
View loaded: 1 => 1718550530
View loaded: 1 => 2 => 3
View loaded: 1 => 2 => 3 => 1718550532
View loaded: 1 => 2 => 3 => 4 => 5

看起来像个错误。向Apple报告:https://openradar.appspot.com/28574572

1 个答案:

答案 0 :(得分:0)

截至今天(2020年7月21日),在Swift 5.something和Xcode 11.6中,当在iOS应用中使用os_log时,我仍然遇到此问题。

这不是一个完整的解决方案,但是对我有效的一种解决方法是在Int调用之前将传入的String转换为os_log()(不要忘记更改格式令牌)到%@):

let intA = 7
let intB = 4
os_log("State changed: from %@ to %@", String(intA), String(intB))