将日志写入文本文件也是一种简单的方法吗?我需要一个崩溃日志来分析出错的时间。但我已经在代码中使用了println al。
答案 0 :(得分:4)
对于swift 3,改变Thomas Killan这样的代码
func println(s:String) {
let path = "/Users/<me>/dump.txt"
var dump = ""
if FileManager.default.fileExists(atPath: path) {
dump = try! String(contentsOfFile: path, encoding: String.Encoding.utf8)
}
do {
// Write to the file
try "\(dump)\n\(s)".write(toFile: path, atomically: true, encoding: String.Encoding.utf8)
} catch let error as NSError {
print("Failed writing to log file: \(path), Error: " + error.localizedDescription)
}
}
答案 1 :(得分:3)
使用String.writeToFile(<#path: String#>, atomically: <#Bool#>, encoding: <#NSStringEncoding#>, error: <#NSErrorPointer#>)
您可以添加:
#if DEBUG
func println(s:String) {
var error:NSError? = nil
let path = "/Users/<me>/dump.txt"
var dump = String(contentsOfFile: path, encoding: NSUTF8StringEncoding, error: nil)!
"\(dump)\n\(s)".writeToFile(path, atomically:true, encoding:NSUTF8StringEncoding, error:&error)
}
#endif
请参阅关于如何使用此编译器标志的#if DEBUG答案。
答案 2 :(得分:2)
不幸的是,使用基于println()
的解决方案不会导致Apple系统日志(ASL)捕获输出。
ASL是由NSLog()
使用的Mac OS和iOS提供的日志记录工具(通过控制台应用程序可以在Mac上看到)。由于NSLog()
使用ASL,因此NSLog()
记录的日志条目将通过设备控制台显示。通过println()
记录的消息将不会在ASL中捕获,因此,在发生某些事情后,没有机会返回控制台进行诊断。
The CleanroomLogger open-source project提供了一个可扩展的Swift API,您可以使用它来执行您想要的操作。除了LogRecorder
之外,您只需实施ASLLogRecorder
并在配置中指定它。
答案 3 :(得分:1)
我将您的功能修改为全局,并添加以保存每日日志。
public func debugPrint(s:String) {
var paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
let documentsDirectory = paths[0]
let formatter = DateFormatter()
formatter.dateFormat = "dd-MM-yyyy"
let dateString = formatter.string(from: Date())
let fileName = "\(dateString).log"
let logFilePath = (documentsDirectory as NSString).appendingPathComponent(fileName)
var dump = ""
if FileManager.default.fileExists(atPath: logFilePath) {
dump = try! String(contentsOfFile: logFilePath, encoding: String.Encoding.utf8)
}
do {
// Write to the file
try "\(dump)\n\(Date()):\(s)".write(toFile: logFilePath, atomically: true, encoding: String.Encoding.utf8)
} catch let error as NSError {
print("Failed writing to log file: \(logFilePath), Error: " + error.localizedDescription)
}
}