swift 使用 os_log 和 NSLog 记录 iOS >= 8

swift logging for iOS >= 8 with os_log and NSLog

我想使用 os_log(可用于 iOS >= 10.0)和 NSLog.

编写自己的日志记录函数

我已经写了这段代码:

static func LogDebug(log: StaticString) {
    if #available(iOS 10.0, *) {
        os_log(log, type: .debug)
    } else {
        NSLog(log)
    }
}

但是现在我得到一个异常,就是StaticString 不能转换成普通的String。你知道怎么解决吗?

这样试试。

static func LogDebug(log: StaticString) {
    if #available(iOS 10.0, *) {
        os_log(log, type: .debug)
    } else {
        NSLog(String(describing: log))
    }
}

os_log()NSLog() 的第一个参数都是 格式字符串 ,并且包含 format specifiers(以 % 开头)由以下可变参数列表扩展。

要记录任意字符串,请使用 %@ 格式,后跟 细绳。否则,如果字符串包含 % 个字符,它可能会崩溃或产生错误的输出:

func LogDebug(log: String) {
    if #available(iOS 10.0, macOS 10.12, *) {
        os_log("%@", type: .debug, log)
    } else {
        NSLog("%@", log)
    }
}