SwiftyTimber
SwiftyTimber 是另一个来自 PureLogger 并受 Timber 启发的 Logging 库的分叉。
这个库的主要目标是
- 自由地记录日志,无需担心生产环境
- 在调试控制台轻松阅读已记录的消息
- 将错误记录到 Crashlytics(或类似的崩溃报告系统)
安装
CocoaPods
最新版本
pod 'SwiftyTimber'
或
pod 'SwiftyTimber', :git => "https://github.com/iballan/SwiftyTimber.git"
具体版本
pod 'SwiftyTimber', :git => "https://github.com/iballan/SwiftyTimber.git", :tag => "0.1.0"
Swift 包管理器
完成 Swift 包的配置后,将 SwiftyTimber 添加为依赖项就像将其添加到 Package.swift 的 dependencies 值一样简单。
dependencies: [
.package(url: "https://github.com/iballan/SwiftyTimber.git", .upToNextMajor(from: "0.1.0"))
]
用法
种植树木的示例
// Static methods
#import SwiftyTimber
#if DEBUG
Timber.shared.plant(TimberDebugTree())
#else
Timber.shared.plant(TimberCrashlyticsTree())
#endif
// Then in your code
#import SwiftyTimber
Timber.i("This is info log")
Timber.d("This is debug log")
Timber.e("This is error log", error)
或者我更喜欢的方式
#import SwiftyTimber
#if DEBUG
let logger = Timber.shared.plant(TimberDebugTree())
#else
let logger = Timber.shared.plant(TimberCrashlyticsTree()).plant(AnotherTree())
#endif
// Then in your code
logger.i("This is info log")
logger.d("This is debug log")
logger.e("This is error log", error)
示例
向 Crashlytics 记录日志的树木插入示例
import FirebaseCrashlytics
public class TimberCrashlyticsTree: TimberTree {
public func print(_ message: String, _ error: Error?, level: TimberLogLevel?, filename: String, line: Int, column: Int, funcName: String) {
guard level == .error else { return }
let sourceName = getSourceFileName(filePath: filename)
let systemInfo = "[\(sourceName)]:\(line) \(funcName)"
let message = "\(item)"
let keysAndValues: [String : Any] = [
"level" : level?.name ?? "none",
"filename" : filename,
"line" : line,
"column" : column,
"systemInfo" : systemInfo,
"message" : message
]
Crashlytics.crashlytics().setCustomKeysAndValues(keysAndValues)
if let error = error {
Crashlytics.crashlytics().record(error: error)
} else {
Crashlytics.crashlytics().record(exceptionModel: ExceptionModel(name: "\(sourceName)-\(funcName)", reason: message))
}
}
func getSourceFileName(filePath: String) -> String {
let components = filePath.components(separatedBy: "/")
return components.last ?? ""
}
}