统一日志记录,StaticString,CustomStringConvertible和说明的问题

时间:2018-11-20 23:14:25

标签: swift

我想知道如何使用统一日志记录来处理以下相当常见的情况。假设我有一个要记录的Foo类的对象。 Foo实现了CustomStringConvertible协议,因此我可以获得在日志中可以使用的对象的描述:

class Foo: CustomStringConvertible {
     var bar:Int = 1

     var description: String {
          return "<\(type(of: self)): bar = \(bar)>"
     }
}

let myFoo = Foo()

如果我致电print(myFoo),我会得到一个很好的关于Foo的描述。但是,os_log(myFoo)无法使用,因为description不是StaticString。有什么方法可以完成我想做的事情?

1 个答案:

答案 0 :(得分:3)

我无法理解您觉得困难的部分,所以这是一个完整的示例,您可以根据需要选择其中的一个:

import UIKit
import os
let mylog = OSLog(subsystem: "com.neuburg.matt", category: "testing")
class Foo: CustomStringConvertible {
    var bar:Int = 1
    var description: String {
        return "<\(type(of: self)): bar = \(bar)>"
    }
}
class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        let foo = Foo()
        os_log("%{public}@", log: mylog, String(describing:foo))
    }
}

打印:

[testing] <Foo: bar = 1>

...我相信这是目标,不是吗?