在Swift中将NSLogredirect到文件无法正常工作

我试图发送NSLog到在模拟器,IOS 10.2上运行的Swift 3中的文件,并且没有任何内容正在生成

如何NSLog到一个文件

func redirectConsoleLogToDocumentFolder() { let file = "file.txt" if let dir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first { let logPath = dir.appendingPathComponent(file).absoluteString print("log:\(logPath)") freopen(logPath, "a+", stderr) } NSLog("print nslog") } 

产量

 ~/Library/Developer/CoreSimulator/Devices/A7B717-3ED8-493A-9778-C594AF9FF446/data/Containers/Data/Application/B0386-64BB-46EB-9BF2-65209FC748CD/Documents/file.txt 

唯一的影响是输出不再打印到控制台。

我努力了

 freopen(logPath.cString(using: .utf8), "a+", stderr) 

和其他各种组合

我没有任何麻烦,写一个文件与我收到的path,所以没有什么错

我期望在path中看到一个名为file.txt的文件,文件中包含“print nslog”。 我曾尝试创build文件没有成功。

URLabsoluteString属性会生成一个URLstring,例如

    文件:///path/to/file.txt

这不适合作为freopen()参数。 要将文件path作为string获取,请改用path

 let logPath = dir.appendingPathComponent(file).path 

更好的是,使用专用方法将URLpath传递给系统调用:

 let logFileURL = dir.appendingPathComponent(file) logFileURL.withUnsafeFileSystemRepresentation { _ = freopen($0, "a+", stderr) }