XCGLogger 3.0 不将日志文件写入文件系统 (iOS 9)
XCGLogger 3.0 doesn't write logfile to filesystem (iOS 9)
我想使用 XCGLogger 3.0 在 Swift 编写的 iOS9 应用程序中进行日志记录 2. 在 AppDelegate 中,我定义
let log = XCGLogger.defaultInstance()
在 application: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 [Info] > myapp Version: 1.0 Build: 1 PID: 49243
2015-11-04 18:28:40.798 [Info] > XCGLogger Version: 3.0 - LogLevel: Debug
2015-11-04 18:28:40.801 [Info] > XCGLogger writing to log to: file:///tmp/app.log
但是当我查看正确的模拟器实例(使用 SimPholders2)的沙箱文件系统时,没有日志文件 app.log。
当我在 IPhone 6 上启动应用程序时更糟。 XCode 控制台中的输出是:
2015-11-04 18:36:14.692 [Error] > Attempt to open log file for writing failed: The operation couldn’t be completed. (Cocoa error 2.)
我还尝试了不同的路径,例如“/tmp/app.log”、“Library/Caches/de.myidentifier.myapp/app.log”、“/Library/Caches/de.myidentifier.myapp/app.log" 等但没有成功...
我做错了什么?
在 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 Dave Wood 示例的 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)
我想使用 XCGLogger 3.0 在 Swift 编写的 iOS9 应用程序中进行日志记录 2. 在 AppDelegate 中,我定义
let log = XCGLogger.defaultInstance()
在 application: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 [Info] > myapp Version: 1.0 Build: 1 PID: 49243
2015-11-04 18:28:40.798 [Info] > XCGLogger Version: 3.0 - LogLevel: Debug
2015-11-04 18:28:40.801 [Info] > XCGLogger writing to log to: file:///tmp/app.log
但是当我查看正确的模拟器实例(使用 SimPholders2)的沙箱文件系统时,没有日志文件 app.log。
当我在 IPhone 6 上启动应用程序时更糟。 XCode 控制台中的输出是:
2015-11-04 18:36:14.692 [Error] > Attempt to open log file for writing failed: The operation couldn’t be completed. (Cocoa error 2.)
我还尝试了不同的路径,例如“/tmp/app.log”、“Library/Caches/de.myidentifier.myapp/app.log”、“/Library/Caches/de.myidentifier.myapp/app.log" 等但没有成功...
我做错了什么?
在 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 Dave Wood 示例的 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)