从Objective C的背景来看,当我使用NSLog()时,它会在文本前面加上日期时间戳,但当我在Swift上使用print()时,它只会打印文本那么是否有一种方法可以让它也打印时间戳,或者我做错了什么?
NSLog()
print()
6ie5vjzr1#
因为print不是NSLog。就这么简单。NSLog是Foundation中的一个日志记录工具,可写入控制台上显示的Apple系统日志工具。print(…)是Swift标准库中的一个print函数,它写入标准输出,在调试会话中出现在控制台上。您可以将Date()添加到print参数以打印当前时间和日期。(或Date().description(with: Locale.current)以获得您当地的时区。或者你可以使用NSLog,它也可以在Swift中使用(如果你导入Foundation)。
print
NSLog
print(…)
Date()
Date().description(with: Locale.current)
wtzytmuj2#
Swift:
NSLog("this will print with dates")
mi7gmzs63#
这一个只是输出一个简单的时间戳,但可以很容易地修改,以包括额外的文本,如果你想。此外,它依赖于lazyDateFormatter来避免昂贵的初始化。
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)
bbuxkriu4#
这里有一个建议的函数,你可以用它来代替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!) } }
o7jaxewo5#
新增os.Logger.log接口,可选level参数:https://developer.apple.com/documentation/os/logger/3551622-log
os.Logger.log
level
import os.Logger log("Message \(var)") log(level: .debug, "Message \(var)")
你可以在Swift中使用Logging os模块来实现:https://developer.apple.com/documentation/os/loggingos_log:https://developer.apple.com/documentation/os/2320718-os_log
Logging
os_log
import os.log os_log("Message %d", type: .info, value)
yws3nbqq6#
创建自己的打印类函数,例如printWithDate(),并在输出前添加日期。然后,您可以在任何地方使用它,而无需在每次打印时添加日期。
6条答案
按热度按时间6ie5vjzr1#
因为
print
不是NSLog
。就这么简单。NSLog
是Foundation中的一个日志记录工具,可写入控制台上显示的Apple系统日志工具。print(…)
是Swift标准库中的一个print函数,它写入标准输出,在调试会话中出现在控制台上。您可以将
Date()
添加到print
参数以打印当前时间和日期。(或Date().description(with: Locale.current)
以获得您当地的时区。或者你可以使用
NSLog
,它也可以在Swift中使用(如果你导入Foundation)。wtzytmuj2#
Swift:
mi7gmzs63#
这一个只是输出一个简单的时间戳,但可以很容易地修改,以包括额外的文本,如果你想。
此外,它依赖于
lazy
DateFormatter
来避免昂贵的初始化。bbuxkriu4#
这里有一个建议的函数,你可以用它来代替print()
o7jaxewo5#
iOS 14+
新增
os.Logger.log
接口,可选level
参数:https://developer.apple.com/documentation/os/logger/3551622-log已弃用️
你可以在Swift中使用
Logging
os模块来实现:https://developer.apple.com/documentation/os/loggingos_log
:https://developer.apple.com/documentation/os/2320718-os_logyws3nbqq6#
创建自己的打印类函数,例如printWithDate(),并在输出前添加日期。然后,您可以在任何地方使用它,而无需在每次打印时添加日期。