iLog
您喜欢 iLog 吗?给它一个
它的工作原理
iLog 是一个简单的日志管理器,它使用快速 SqlLite 数据库来存储您的日志。
- 四种日志类型:
debug
、info
、warn
、error
- 记录 文件、函数 和 行
- 非常快!
- 日志驱动器:包含控制台和 Sql 驱动器。如果您需要,可以编写自己的驱动器
- 漂亮的日志查看器界面
- 可定制
- 文档齐全
- 等等...
要求
- Swift 3
- iOS 9+
1.3.0 版本中的新功能
- 巨大的性能提升。日志在独特的后台队列中执行
- 新的日志查看器带有全文搜索和日志级别过滤功能
安装
CocoaPods
CocoaPods 是 Cocoa 项目的依赖管理器。您可以使用以下命令安装它:
$ gem install cocoapods
要使用 CocoaPods 将 iLog 集成到您的 Xcode 项目中,请在您的 Podfile
中指定它:
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '9.0'
use_frameworks!
pod 'iLog'
然后,运行以下命令:
$ pod install
如果您想使用我们的日志查看器,请将以下行添加到您的 Podfile
:
pod 'iLog/UI'
iLog/UI
需要 iOS 9 以上版本。
Carthage
Carthage 是一个去中心化的依赖管理器,它构建您的依赖关系并为您提供二进制框架。
您可以使用以下命令通过 Homebrew 安装 Carthage:
$ brew update
$ brew install carthage
要使用 Carthage 将 SideMenu 集成到您的 Xcode 项目中,请在您的 Cartfile
中指定它:
github "leoneparise/iLog" "master"
用法
log(_ level:LogLevel, _ message:String)
在内部,这个函数使用 LogManager
共享实例来记录您的数据。 LogManager
是 iLog 的主类,具有以下签名:
public class LogManager {
/// LogManager level
public var level:LogLevel = .debug {
/// Callback used to receive a log event. This function is called when ANY LogManager saves a log.
public var didLog: DidLogCallback?
/// Drivers
public var drivers: [LogDriver]
/// Main driver is always the first driver in drivers attribute.
public var mainDriver: LogDriver?
/// Share instance. Can be customized to meed your needs
public static var shared: LogManager
/// Get all logs. Depends if the mainDriver provides this feature
public func all(level levelOrNil: LogLevel? = nil, offset: Int = 0) -> [LogEntry]?
/// Log into all drivers
public func log(file: String = #file, line: UInt = #line, function: String = #function, level: LogLevel = .debug, message: String)
/// Clear all logs
public func clear() {
}
示例
log(.debug, "My debug message")
log(.info, "My info message")
log(.error, "Something really bad happened...")
要禁用生产环境的日志数据库,请将以下代码放入您的 application(_:didFinishLaunchWithOptions:)
方法中:
if let sqlLogDriver = SqlLogDriver(), let consoleLogDriver = ConsoleLogDriver() {
#if DEBUG
LogManager.shared.drivers = [sqlLogDriver, consoleLogDriver]
#else
LogManager.shared.drivers = [consoleLogDriver]
#endif
}
如果您想接收日志事件,您可以使用 NotificationCenter
并监听 Notification.Name.LogManagerDidLog
通知。该对象是用于存储日志的 LogEntry
结构体。您也可以在 ANY LogManager
实例中设置 didLog
函数来达到相同的效果。
实现您自己的驱动程序
LogDriver 协议定义为
public protocol LogDriver:class {
/// Function called when a log is send by this driver
var didLog: DidLogCallback? { get set }
/// Minimum level to log **debug < info < warn < error**
var level:LogLevel { get set }
/**
Logs a LogEntry. This is the main function of this driver
- parameter entry: log entry
*/
func log(entry:LogEntry)
/**
Get all logs stored by this driver. **Some drivers doesn't offer log history** (eg: ConsoleLogDriver) returning `nil`.
- parameter level: log level to filter
- parameter offset: offset to the history
- returns: Array of `LogEntry` if history is supported or `nil` otherwise
*/
func all(level levelOrNil:LogLevel?, offset:Int) -> [LogEntry]?
/**
Store logs in another service. The handler function must call the callback to tell this driver
the the storing was completed with success. The driver must handle what should be stored or not.
**Some drivers doesn't suppor store (eg: ConsoleLogDriver)**
- parameter: handler Store function handler
*/
func store(_ handler: StoreHandler)
/// Clear logs. **Some drivers doesn't support clear**
func clear()
}
某些驱动程序可能支持所有功能,如 历史记录、存储或 清除。如果您的驱动程序不支持这些功能,请留空实现或返回 nil
。查看 ConsoleLogDriver
和 SqlLodDriver
获取更多信息。
日志查看器
要查看您的日志,可以使用我们的 日志查看器 视图控制器。只需实例化我们的 LogViewerViewController
并在您的代码中显示即可
self.present(LogViewerViewController(), animated: true)
在您的后端存储日志
您可以发送日志到您的服务器。SqlLogDriver()
必须设置为您的 LogManager
实例中的 mainDriver
。在调用 applicationDidEnterBackground(_ application:)
方法时,提供您自己的存储处理程序,我们将处理其余部分。
func applicationDidEnterBackground(_ application: UIApplication) {
LogManager.shared.storeLogsInBackground(application:application) { (entries, callback) in
// Call your api with entries
callback(success)
}
}