【问题标题】:Swift - Redirect Console Log To Document FolderSwift - 将控制台日志重定向到文档文件夹
【发布时间】:2015-12-01 17:09:49
【问题描述】:

我正在寻找以下 Objective C 通用代码的 Swift 等效。 在 Objective C 中,我们将日志重定向到文档文件夹而不是控制台:

- (void) redirectConsoleLogToDocumentFolder
{
 NSArray *paths = 
NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,
YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *logPath = [documentsDirectory
stringByAppendingPathComponent:@"console.log"];
freopen([logPath 
cStringUsingEncoding:NSASCIIStringEncoding],"a+",stderr);
}

在 Swift 2 中是如何做到的?

【问题讨论】:

  • 您需要转换整个代码还是只转换 freopen 行?
  • 整个代码,如果你不介意的话!

标签: ios objective-c logging console swift2


【解决方案1】:

我建议阅读有关登录swift的信息

func redirectConsoleLogToDocumentFolder() {
    var paths: NSArray = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
    var documentsDirectory: NSString = paths[0]
    var logPath: NSString = documentsDirectory.stringByAppendingPathComponent("console.log")
    var cstr = (logPath as NSString).UTF8String
    freopen(cstr, "a+", stderr)
}

【讨论】:

  • 谢谢。它会抛出错误,但至少我现在有什么可以使用的。 3 个错误是 NSDocumentDirectory 和 NSDomainMask 都是“未解析的标识符”,并且“stringByAppendingPathComponent”不可用:在 NSURL 上使用 URLByAppendingPathComponent。
  • @Mt.T 我正在使用您提供的代码将标准输出重定向到文件。当我这样做时,我观察到 print() 不再出现在控制台上(好),并且有一个与我的应用程序关联的文件,我可以通过 iTunes 访问它(好)。但是,文件的大小为 0。有什么想法吗?
  • @TejaNandamuri,我没有将任何文本写入日志文件。
  • 就像一个魅力,我不得不修改这个let documentsDirectory: NSString = paths[0] as! NSString你可以使用stackoverflow.com/a/26379551/5414535从mac访问这样的日志文件
【解决方案2】:

Swift 3.0 的更新答案

if let path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first {
    let documentsDirectory = NSURL(fileURLWithPath: path)
    let logPath = documentsDirectory.appendingPathComponent("console.log")!
    freopen(logPath.absoluteString, "a+", stderr)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-18
    • 1970-01-01
    • 1970-01-01
    • 2011-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多