跳到主要內容

[iOS] Log file for iOS

目的︰用檔案記錄log,以時間組成檔名(yyyyMMddHHmmss),只保留7天

做法︰

1. 使用XCGLogger來記錄log

2. 每次APP啟動時,檢查log檔案是否有超過7天的,超過就刪除

// AppDelegate.swift

import XCGLogger

struct MyVariables {
    static let logger = XCGLogger.defaultInstance()
    static let documentsPath = NSHomeDirectory() + "/Documents"
}

class AppDelegate: UIResponder, UIApplicationDelegate {
	func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

		// 清除7天前的log檔
        cleanOldLogFile()
        
        // 產生此次log的檔名
        let postFixFormatter = NSDateFormatter()
        postFixFormatter.dateFormat = "yyyyMMddHHmmss"
        postFixFormatter.locale = NSLocale.currentLocale()
        let logFileName = "Ticket_" + postFixFormatter.stringFromDate(NSDate()) + ".log"
        let logFileWithFullPath = MyVariables.documentsPath.stringByAppendingString("/\(logFileName)")
        
        let dateFormatter = NSDateFormatter()
        dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss.SSS"
        dateFormatter.locale = NSLocale.currentLocale()
        
        // print to log file
        MyVariables.logger.setup(.Debug, showThreadName: true, showLogLevel: true, showFileNames: true, showLineNumbers: true, writeToFile: logFileWithFullPath, fileLogLevel: .Debug)

        // ...

        return true
	}

	func cleanOldLogFile(){
        let documentsUrl =  NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask).first!
        do {
            // 找出所有的*.log檔
            let directoryUrls = try  NSFileManager.defaultManager().contentsOfDirectoryAtURL(documentsUrl, includingPropertiesForKeys: nil, options: NSDirectoryEnumerationOptions())
            let logFiles = directoryUrls.filter(){ $0.pathExtension == "log" }.map{ $0.lastPathComponent }
            
            // 7天前的Date
            let sevenDaysAge = NSDate().dateByAddingTimeInterval(-7*24*60*60)
            
            let logFileDateFormatter = NSDateFormatter()
            logFileDateFormatter.dateFormat = "yyyyMMddHHmmss"

            for logFileName in logFiles {

                let nameSplitedArray = logFileName!.componentsSeparatedByString("_")
				// swift中字符串截取方法(substring)http://www.swiftmi.com/topic/76.html
                let index = nameSplitedArray[1].endIndex.advancedBy(-4) // 從字串最後面往回4個位置
                let logFileDate = logFileDateFormatter.dateFromString(nameSplitedArray[1].substringToIndex(index))
                if logFileDate!.isLessThanDate(sevenDaysAge) { // 比7天前的日期還小(早) -> 要刪除
                    let fp = MyVariables.documentsPath.stringByAppendingString("/\(logFileName!)")
                    print("Delete old log file: \(logFileName!)")
                    // 刪除檔案
                    try NSFileManager.defaultManager().removeItemAtPath(fp)
                }
            }
            
        } catch let error as NSError {
            print(error.localizedDescription)
        }
    }

}

留言

這個網誌中的熱門文章

隱私權政策-台股評價分析

非常歡迎您使用APP「台股評價分析」(以下簡稱APP),為了讓您能夠安心的使用APP的各項服務與資訊,特此向您說明APP的隱私權保護政策,以保障您的權益,請您詳閱下列內容: 一、隱私權保護政策的適用範圍 隱私權保護政策內容,包括APP如何處理在您使用APP服務時收集到的個人識別資料。隱私權保護政策不適用於APP以外的相關連結APP,也不適用於非APP所委託或參與管理的人員。 二、個人資料的蒐集、處理及利用方式 當您造訪APP或使用APP所提供之功能服務時,我們將視該服務功能性質,請您提供必要的個人資料,並在該特定目的範圍內處理及利用您的個人資料;非經您書面同意,APP不會將個人資料用於其他用途。 APP在您使用服務信箱、問卷調查等互動性功能時,會保留您所提供的姓名、電子郵件地址、聯絡方式及使用時間等。 於一般瀏覽時,伺服器會自行記錄相關行徑,包括您使用連線設備的IP位址、使用時間、使用的瀏覽器、瀏覽及點選資料記錄等,做為我們增進APP服務的參考依據,此記錄為內部應用,決不對外公佈。 為提供精確的服務,我們會將收集的問卷調查內容進行統計與分析,分析結果之統計數據或說明文字呈現,除供內部研究外,我們會視需要公佈統計數據及說明文字,但不涉及特定個人之資料。 三、資料之保護 APP主機均設有防火牆、防毒系統等相關的各項資訊安全設備及必要的安全防護措施,加以保護APP及您的個人資料採用嚴格的保護措施,只由經過授權的人員才能接觸您的個人資料,相關處理人員皆簽有保密合約,如有違反保密義務者,將會受到相關的法律處分。 如因業務需要有必要委託其他單位提供服務時,APP亦會嚴格要求其遵守保密義務,並且採取必要檢查程序以確定其將確實遵守。 四、APP對外的相關連結 APP的網頁提供其他APP的網路連結,您也可經由APP所提供的連結,點選進入其他APP。但該連結APP不適用APP的隱私權保護政策,您必須參考該連結APP中的隱私權保護政策。 五、與第三人共用個人資料之政策 APP絕不會提供、交換、出租或出售任何您的個人資料給其他個人、團體、私人企業或公務機關,但有法律依據或合約義務者,不在此限。 前項但書之情形包括不限於: 經由您書面同意。 法律明文規定。 為免除您生命、身體、自由或財產上之危險。 與公務機關或學術研究機構合作,基於公共利益為統...

隱私權政策-台股營收分析

非常歡迎您使用APP「台股營收分析」(以下簡稱APP),為了讓您能夠安心的使用APP的各項服務與資訊,特此向您說明APP的隱私權保護政策,以保障您的權益,請您詳閱下列內容: 一、隱私權保護政策的適用範圍 隱私權保護政策內容,包括APP如何處理在您使用APP服務時收集到的個人識別資料。隱私權保護政策不適用於APP以外的相關連結APP,也不適用於非APP所委託或參與管理的人員。 二、個人資料的蒐集、處理及利用方式 當您造訪APP或使用APP所提供之功能服務時,我們將視該服務功能性質,請您提供必要的個人資料,並在該特定目的範圍內處理及利用您的個人資料;非經您書面同意,APP不會將個人資料用於其他用途。 APP在您使用服務信箱、問卷調查等互動性功能時,會保留您所提供的姓名、電子郵件地址、聯絡方式及使用時間等。 於一般瀏覽時,伺服器會自行記錄相關行徑,包括您使用連線設備的IP位址、使用時間、使用的瀏覽器、瀏覽及點選資料記錄等,做為我們增進APP服務的參考依據,此記錄為內部應用,決不對外公佈。 為提供精確的服務,我們會將收集的問卷調查內容進行統計與分析,分析結果之統計數據或說明文字呈現,除供內部研究外,我們會視需要公佈統計數據及說明文字,但不涉及特定個人之資料。 三、資料之保護 APP主機均設有防火牆、防毒系統等相關的各項資訊安全設備及必要的安全防護措施,加以保護APP及您的個人資料採用嚴格的保護措施,只由經過授權的人員才能接觸您的個人資料,相關處理人員皆簽有保密合約,如有違反保密義務者,將會受到相關的法律處分。 如因業務需要有必要委託其他單位提供服務時,APP亦會嚴格要求其遵守保密義務,並且採取必要檢查程序以確定其將確實遵守。 四、APP對外的相關連結 APP的網頁提供其他APP的網路連結,您也可經由APP所提供的連結,點選進入其他APP。但該連結APP不適用APP的隱私權保護政策,您必須參考該連結APP中的隱私權保護政策。 五、與第三人共用個人資料之政策 APP絕不會提供、交換、出租或出售任何您的個人資料給其他個人、團體、私人企業或公務機關,但有法律依據或合約義務者,不在此限。 前項但書之情形包括不限於: 經由您書面同意。 法律明文規定。 為免除您生命、身體、自由或財產上之危險。 與公務機關或學術研究機構合作,基於公...

小光頭快長大APP

小光頭快長大APP 新手父母總是手忙腳亂 當寶寶哭鬧時,總是要猜寶寶是想睡覺、還是肚子餓了 還要回想寶寶上一餐是幾點吃的,吃了多少… 本APP協助新手爸媽 1. 記錄寶寶每一餐的時間,及奶量 2. 設定鬧鐘,定時提醒爸媽您的寶寶應該是肚子餓了