集成背景
上一篇写了在swift项目中使用cocoalumberjack日志库的oc方式,可以参考我的上一篇文章Swift集成CocoaLumberJack日志库(一),这个swift集成oc有个缺陷也在文中说到了,新建的管理类打印的日志都只是在当下的管理类里面包括函数和类名
pod安装引用
使用cocoapod安装库:pod 'CocoaLumberjack/Swift'
.在上篇文中我使用的 pod 'CocoaLumberjack'
后面加上swift就可以使用swift的方式调用日志打印了。加上之后可以再你的桥接文件中继续引入#import <CocoaLumberjack/CocoaLumberjack.h>
这样就方便全局使用,当然你也可以使用别的方式。
基本使用
沿用了上篇的文中的方式,新建一个LogManager类,直接上代码
import Foundation
import CocoaLumberjack
class CASLogManager:NSObject {
// 单例
static let sharedInstance = CASLogManager()
func addLoggers() {
/// 添加控制台打印
DDLog.add(DDOSLogger.sharedInstance)
// //修改Logs文件夹的位置
let path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first
let logDirectory = path?.appendingPathComponent("Logs")
let fileLoggerManagerDefault = DDLogFileSub.init(logsDirectory: logDirectory)
let fileLogger = DDFileLogger.init(logFileManager: fileLoggerManagerDefault)
//重用log文件,不要每次启动都创建新的log文件(默认值是NO)
fileLogger.doNotReuseLogFiles = false;
//log文件在24小时内有效,超过时间创建新log文件(默认值是24小时)
fileLogger.rollingFrequency = 60*60*24;
//禁用文件大小滚动
fileLogger.maximumFileSize = 0;
//最多保存7个log文件
fileLogger.logFileManager.maximumNumberOfLogFiles = 7;
//log文件夹最多保存20M
fileLogger.logFileManager.logFilesDiskQuota = 1024*1024*20;
// 设置日志格式
fileLogger.logFormatter = self
DDLog.add(fileLogger) // 添加文件日志
}
}
这些基本设置跟我在一中写的一样,只不过换成swift的方式,还有重写日志文件名称,这里也是新建了一个class继承DDLogFileManagerDefault
重写了其中的两个方法
/// 重写文件名
class DDLogFileSub: DDLogFileManagerDefault {
override func isLogFile(withName fileName: String) -> Bool {
let hasSuffix = fileName.hasSuffix(".log")
return hasSuffix
}
override var newLogFileName: String{
get{ self.creatNewLogFileName() }
set{}
}
func creatNewLogFileName() -> String {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "YYYY.MM.dd HH.mm.ss"
let timeStamp = dateFormatter.string(from: NSDate.init() as Date)
let disPlayName = Bundle.main.object(forInfoDictionaryKey: "CFBundleDisplayName")
return "\(disPlayName!)\(timeStamp).log"
}
}
然后就是修改日志的内容和格式 可以看到行数 类名和调用方法,extension是manager成为
DDLogFormatter的代理,并实现format的方法
extension CASLogManager:DDLogFormatter{
func format(message logMessage: DDLogMessage) -> String? {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "YYYY-MM-dd HH:mm:ss:SSS"
let timeStamp = dateFormatter.string(from: NSDate.init() as Date)
let formatLog = "\(timeStamp)\n className:\(logMessage.fileName)\n fuction:\(logMessage.function ?? "")\n line:\(logMessage.line)\n \(logMessage.message)";
return formatLog;
}
}
我在这里新加了换行符\n
让文件中的日志看着更清晰如下图
![](https://img.haomeiwen.com/i14105615/b89292b03c3a19c8.png)
这样就比较完美了。本篇省略了一些东西不明白的可以参考Swift集成CocoaLumberJack日志库(一)内容
网友评论