可以将swift println日志写入文件吗?

时间:2015-01-23 16:16:31

标签: swift logging

将日志写入文本文件也是一种简单的方法吗?我需要一个崩溃日志来分析出错的时间。但我已经在代码中使用了println al。

4 个答案:

答案 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)
}
}