Swift 标准库中有以下方法:
func print<Target>(_ items: Any..., separator: String = default, terminator: String = default, to output: inout Target) where Target : TextOutputStream
Run Code Online (Sandbox Code Playgroud)
和
func debugPrint<Target>(_ items: Any..., separator: String = default, terminator: String = default, to output: inout Target) where Target : TextOutputStream
Run Code Online (Sandbox Code Playgroud)
您可以创建一个对象来实现TextOutputStream将消息保存到您选择的文件中。如果您的代码库中已经有现有的打印,这非常有用。然后您只需向它们添加附加参数即可。请记住,这些打印将停止记录到标准输出(控制台)。
例子:
final class LogDestination: TextOutputStream {
private let path: String
init() {
let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
path = paths.first! + "/log"
}
func write(_ string: String) {
if let data = string.data(using: .utf8), let fileHandle = FileHandle(forWritingAtPath: path) {
defer {
fileHandle.closeFile()
}
fileHandle.seekToEndOfFile()
fileHandle.write(data)
}
}
}
Run Code Online (Sandbox Code Playgroud)
进而
// I would probably use Singleton for this
var dest = LogDestination()
print("My test message", to: &dest)
Run Code Online (Sandbox Code Playgroud)
可以将所有打印/调试打印日志写入 iOS 中的文件。使用下面的方法将调试日志写入文件。
注意:如果您使用以下代码,日志将不会打印在控制台上。
func writeIntoFile() {
if let documentDirectoryPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first {
let filePath = documentDirectoryPath + "/logfile.txt"
freopen(filePath.cString(using: .ascii), "a", stderr)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4528 次 |
| 最近记录: |