为什么 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_log
:https://developer.apple.com/documentation/os/2320718-os_log
import os.log
os_log("Message %d", type: .info, value)
在 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_log
:https://developer.apple.com/documentation/os/2320718-os_log
import os.log
os_log("Message %d", type: .info, value)