今天想要保存ios日志,存储到本地,后续方面追踪
网上看到有两种方式
第一种是直接冲定位NSLog中的日志位置,这种简单,但是功能少,需要自己处理文件
private func redirectNSlogToDocumentFolder() {
let documentDirectory = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
let dateFormat = DateFormatter()
dateFormat.dateFormat = "yyyy-MM-dd"
let fileName = String(format: "Log-%@.txt", dateFormat.string(from: Date()))
let logfilePath = documentDirectory + "/" + fileName;
let content = try? String.init(contentsOfFile: logfilePath)
freopen(logfilePath.cString(using: .ascii), "a+", stdout)
freopen(logfilePath.cString(using: .ascii), "a+", stderr)
}
接着找到了一个第三方库CocoaLumberjack,这个库很强大,支持oc和swift,
先看看这个库的UML图
CocoaLumberjack UML图 是不是很吊呢
但是我用swift一直启动就崩溃,后面找出原因,调用内联函数就crash,集成步骤如下
采用pod集成方式,用的是swift
pod 'CocoaLumberjack/Swift'
然后终端调用install下载
pod install
然后就开始使用了,swift 和oc差别就是多了这几个文件
这里面主要是定义一些内联函数,优化日志输出,方便代码编写,也就是下面的打印日志函数
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
DDLog.add(DDOSLogger.sharedInstance)
DDLog.add(DDTTYLogger.sharedInstance!)
DDTTYLogger.sharedInstance?.colorsEnabled = true
let fileLogger = DDFileLogger.init()
fileLogger.rollingFrequency = 60 * 60 * 24
fileLogger.logFileManager.maximumNumberOfLogFiles = 7
DDLog.add(fileLogger)
// 运行就死在这里
DDLogVerbose("Verbose");
DDLogDebug("Debug");
DDLogInfo("Info");
DDLogWarn("Warn");
DDLogError("Error");
}
尝试了好久,到上面那句打印日志就crash,后面发现,感觉就是调用的那句没有找到,由于是pod继承,猜想可能是这个CocoaLumberjack.swift没有被工程引入,果断把这个文件拷贝放到工程目录下,然后在运行,完美大吉。
网友评论