【问题标题】:XCGLogger 3.0 doesn't write logfile to filesystem (iOS 9)XCGLogger 3.0 不会将日志文件写入文件系统(iOS 9)
【发布时间】:2015-11-04 17:40:58
【问题描述】:

我想使用 XCGLogger 3.0 在一个用 Swift 2 编写的 iOS9 应用程序中进行日志记录。在 AppDelegate 中,我定义了

let log = XCGLogger.defaultInstance() 

在应用程序中:didFinishLaunchingWithOptions 我使用以下方式进行设置:

log.setup(.Debug, showThreadName: true, showLogLevel: true, showFileNames: true, showLineNumbers: true, writeToFile: "/tmp/app.log", fileLogLevel: .Debug)

当我在模拟器中启动应用程序时,我在 XCode 7 的控制台中看到 XCGLogger 的输出。输出为:

2015-11-04 18:28:40.798 [信息] > myapp 版本:1.0 构建:1 PID:49243

2015-11-04 18:28:40.798 [信息] > XCGLogger 版本:3.0 - LogLevel:调试

2015-11-04 18:28:40.801 [Info] > XCGLogger 写入日志到:file:///tmp/app.log

但是当我查看正确模拟器实例的沙箱文件系统(使用 SimPholders2)时,没有日志文件 app.log。

当我在我的 iPhone 6 上启动应用程序时,情况更糟。XCode 控制台中的输出是:

2015-11-04 18:36:14.692 [错误] > 尝试打开日志文件写入失败:操作无法完成。 (可可错误2。)

我还尝试了不同的路径,例如“/tmp/app.log”、“Library/Caches/de.myidentifier.myapp/app.log”、“/Library/Caches/de.myidentifier.myapp/app.log”等等,但没有成功......

我做错了什么?

【问题讨论】:

    标签: swift ios9 xcglogger


    【解决方案1】:

    在 iOS 上,您不能只写入 /tmp 文件夹。您需要确保路径在应用程序的沙箱中。

    为此,您需要向系统询问您的缓存目录。 XCGLogger 中的示例应用程序包含执行此操作的代码,但我也会在此处包含它。

    试试这个:

    let cacheDirectory: NSURL = {
        let urls = NSFileManager.defaultManager().URLsForDirectory(.CachesDirectory, inDomains: .UserDomainMask)
        return urls[urls.endIndex - 1] 
    }()
    let logPath: NSURL = cacheDirectory.URLByAppendingPathComponent("app.log")
    log.setup(.Debug, showThreadName: true, showLogLevel: true, showFileNames: true, showLineNumbers: true, writeToFile: logPath, fileLogLevel: .Debug)
    

    【讨论】:

    • 你让我很开心,非常感谢!现在可以了! :-) 来自 Swift/iOS 新手的问候,我还在学习很多东西 :-)
    • 没问题,希望你觉得 XCGLogger 有用!
    【解决方案2】:

    如果有人需要这里是 Dave Wood 的示例的 Swift 4 版本。 感谢您提供 XCGLogger,它是一个很棒的工具。

    let cacheDirectory: URL = {
        let urls = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask)
        return urls[urls.endIndex - 1]
    }()
    
    let logPath = cacheDirectory.appendingPathComponent("app.log")
    
    let fileDestination = FileDestination(writeToFile: logPath, identifier: "testLogger.fileDestination", shouldAppend: true)
    

    【讨论】:

      猜你喜欢
      • 2014-04-30
      • 2018-02-03
      • 2015-11-06
      • 1970-01-01
      • 1970-01-01
      • 2021-10-31
      • 2014-05-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多