为什么 Swift 中的 print() 不将时间戳记录为 objective C 中的 NSLog

Why print() in Swift does not log the time stamp as NSLog in objective C

在 Objective C 的背景下,当我使用 NSLog() 时,它会在文本前加上日期时间戳,但是当我在 Swift 上使用 print() 时,它只会打印文本

所以有办法让它也打印时间戳,还是我做错了什么?

因为 print 不是 NSLog。就这么简单。

NSLog 是 Foundation 中的一个日志记录工具,它写入出现在控制台上的 Apple 系统日志工具。

print(…) 是 Swift 标准库中的一个打印函数,它写入标准输出,出现在调试会话的控制台上。

您可以将 Date() 添加到 print 参数以打印当前时间和日期。 (或 Date().description(with: Locale.current) 获取您当地时区的信息。)

或者您也可以使用 Swift 中可用的 NSLog(如果您导入 Foundation)。

制作您自己的 class 打印函数,例如 printWithDate() 并将日期添加到输出中。然后你可以在任何地方使用它,而不需要每次打印时都添加日期。

Swift:

NSLog("this will print with dates")

这是一个建议的函数,您可以使用它来代替 print()

func printLog(log: AnyObject?) {
    let formatter = NSDateFormatter()
    formatter.dateFormat = "yyyy-MM-dd HH:mm:ss.SSS "
    print(formatter.stringFromDate(NSDate()), terminator: "")
    if log == nil {
        print("nil")
    }
    else {
        print(log!)
    }
}

这个只输出一个简单的时间戳,但如果需要,可以轻松修改以包含其他文本。

此外,它依赖于 lazy DateFormatter 来避免昂贵的初始化。

import Foundation

class Timestamp {
    lazy var dateFormatter: DateFormatter = {
        let formatter = DateFormatter()
        formatter.dateFormat = "yyyy-MM-dd HH:mm:ss.SSS "
        return formatter
    }()

    func printTimestamp() {
        print(dateFormatter.string(from: Date()))
    }
}

let timestamp = Timestamp()
timestamp.printTimestamp() // 2018-07-05 12:57:08.725
timestamp.printTimestamp() // 2018-07-05 12:57:08.727 (uses the same formatter)

您可以在 Swift 中使用 Logging os 模块:https://developer.apple.com/documentation/os/logging

具体来说os_loghttps://developer.apple.com/documentation/os/2320718-os_log

import os.log
os_log("Message %d", type: .info, value)