I am Using cocoaLumberjack logging framework for iOS logging. For storing logs in a file I used this code.
DDFileLogger* fileLogger = [[DDFileLogger alloc] init]; fileLogger.rollingFrequency = 60 * 60 * 24; fileLogger.logFileManager.maximumNumberOfLogFiles = 7; [DDLog addLogger:fileLogger]; DDLogVerbose(@"hello"); NSLog(@"hihihihihi");
I am unable to find where exactly the logfile generated by this code is stored. Can someone help me with this problem ?
You can download the log files from connected device, or you can send directly from app. Both approaches are described below.
Write this in the class where you have a reference to DDFileLogger. I would put this in a custom logger class e.g. 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 } }
Then, when user taps on a button to indicate that they want to send the logs,
// 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(["[email protected]"]) 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. } }
This results in a compose email pop-up with an attachment file named diagnostic.log
, which is all the log files concatenated together.
Special thanks - This is pretty much a Swift translation from the Objective-C version given by the other answer.
If you want to get the log files that your app created while running on device,
/AppData/Library/Caches/Logs/
Up-vote would be nice if this is helpful to you!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With