ios - 使用 cocoaLumberjack 将日志文件存储在哪里

标签 ios objective-c logging cocoalumberjack ddfilelogger

我正在使用 cocoaLumberjack 日志框架进行 iOS 日志记录。 为了将日志存储在文件中,我使用了此代码。

DDFileLogger* fileLogger = [[DDFileLogger alloc] init];
fileLogger.rollingFrequency = 60 * 60 * 24; 
fileLogger.logFileManager.maximumNumberOfLogFiles = 7;

[DDLog addLogger:fileLogger];

DDLogVerbose(@"hello");
NSLog(@"hihihihihi");

我无法找到此代码生成的日志文件的确切存储位置。 有人可以帮我解决这个问题吗?

最佳答案

您可以从连接的设备下载日志文件,也可以直接从应用程序发送。下面介绍了这两种方法。

在 Swift 中通过电子邮件从应用程序发送日志文件

在你引用 DDFileLogger 的类中写下这个。我会把它放在一个自定义记录器类中,例如MyLogger.swift

var ddFileLogger: DDFileLogger!

var logFileDataArray: [NSData] {
    get {
        let logFilePaths = ddFileLogger.logFileManager.sortedLogFilePaths() as! [String]
        var logFileDataArray = [NSData]()
        for logFilePath in logFilePaths {
            let fileURL = NSURL(fileURLWithPath: logFilePath)
            if let logFileData = try? NSData(contentsOfURL: fileURL, options: NSDataReadingOptions.DataReadingMappedIfSafe) {
                // Insert at front to reverse the order, so that oldest logs appear first.
                logFileDataArray.insert(logFileData, atIndex: 0)
            }
        }
        return logFileDataArray
    }
}

然后,当用户点击一个按钮表示他们想要发送日志时,

// Required by MFMailComposeViewController
import MessageUI

@IBAction func writeEmailTapped(sender: AnyObject) {
    if MFMailComposeViewController.canSendMail() {
        let composeVC = MFMailComposeViewController()
        composeVC.mailComposeDelegate = self

        // Configure the fields of the interface.
        composeVC.setToRecipients(["your-email@company.com"])
        composeVC.setSubject("Feedback for app")
        composeVC.setMessageBody("", isHTML: false)

        let attachmentData = NSMutableData()
        for logFileData in MyLogger.sharedInstance.logFileDataArray {
            attachmentData.appendData(logFileData)
        }
        composeVC.addAttachmentData(attachmentData, mimeType: "text/plain", fileName: "diagnostic.log")
        self.presentViewController(composeVC, animated: true, completion: nil)
    } else {
        // Tell user about not able to send email directly.
    }
}

这会导致撰写电子邮件弹出窗口,其中包含一个名为 diagnostic.log 的附件文件,该文件是连接在一起的所有日志文件。

特别感谢 - 这几乎是另一个答案给出的 Objective-C 版本的 Swift 翻译。

通过 USB 数据线直接从设备获取日志文件

如果您想获取您的应用在设备上运行时创建的日志文件,

  1. 将您的设备连接到您的 Mac
  2. 在 Xcode 中,转到窗口 -> 设备
  3. 在设备列表的左上角,点击已连接的设备。
  4. 在主面板的 Installed Apps 部分下,单击您运行 CocoaLumberjack 的应用程序。
  5. 在已安装的应用列表底部,点击齿轮图标,然后点击下载容器。
  6. 在 Finder 中,右键单击(显示菜单)保存的 .xcappdata 文件并选择显示包内容
  7. 日志文件保存在/AppData/Library/Caches/Logs/

如果这对您有帮助,请投票!

关于ios - 使用 cocoaLumberjack 将日志文件存储在哪里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6411549/

相关文章:

iphone - 低连接性的最佳实践?

iphone - iOS:ImageIO 在矩形图像上调整大小

objective-c - init] 在自动引用计数中

ios - 在 IOS 中将图像数组加载到 slider 中

testing - 如何使用 Jest 或其他 Javascript 测试框架测试 console.log 输出?

iphone - Facebook 连接 Batch 请求和 FQL 错误问题

ios - 在 Apple 的 Foundation/Swift/Objective-C 中,runLoop.run 如何阻塞,但仍允许 DispatchWorkItems 处理?

objective-c - UITableViewCell 高度

logging - rsyslog v8 imfile 目录通配符

python - 如何使用日志记录、pytest fixture 和 capsys?