本文介绍对性能数据、SQL执行、错误信息的监控,以及对错误处理信息的处理。
全局监控
开发者可以注册全局监控,获取性能数据、SQL的执行及报错信息。
性能监控
以下是性能监控的示例代码:
- Database.globalTrace(ofPerformance: { (tag, sqls, cost) in
- if let wrappedTag = tag {
- print("Tag: \(wrappedTag) ")
- }else {
- print("Nil tag")
- }
- sqls.forEach({ (arg) in
- print("SQL: \(arg.key) Count: \(arg.value)")
- })
- print("Total cost \(cost) nanoseconds")
- })
性能数据会以 事务 为单位体现在监控中。对于没有手动启用事务的操作,单次操作就是一个事务。
WCDB Swift 默认不开启性能监控。
SQL 监控
以下是 SQL 监控的示例代码:
- Database.globalTrace(ofSQL: { (sql) in
- print("SQL: \(sql)")
- })
每一条执行的 SQL 都会毫无遗漏的在监控中体现。对于熟悉 SQLite 的开发者,可以通过该接口确认操作执行的 SQL 与期望是否一致。
WCDB Swift 默认不开启 SQL 监控。
错误监控
以下是错误监控的示例代码:
- Database.globalTrace(ofError: { (error) in
- switch error.type {
- case .sqliteGlobal:
- debugPrint("[WCDB][DEBUG] \(error.description)")
- case .warning:
- print("[WCDB][WARNING] \(error.description)")
- default:
- print("[WCDB][ERROR] \(error.description)")
- }
- })
每一个错误信息都会在监控中体现。开发者可以注册该接口将错误上报到后台进行监控。
WCDB Swift 默认开启错误监控,以便于开发者发现错误。上述示例代码就是 WCDB Swift 内错误监控的默认实现。
错误处理
除了上述的错误监控,错误还会从函数声明包含 throws
中产生。
- do {
- try database.insert(objects: object, intoTable: "non-existent-table")
- }catch let error as WCDBSwift.Error {
- print(error)
- }
所有错误都是 WCDBSwift.Error
类型,其中最重要的是错误类型和错误码本身,其对应关系如下:
错误类型 | 描述 | 错误码 |
---|---|---|
SQLite | SQLite 错误 | 请参考 SQLite 的相关文档 |
systemCall | 系统调用错误,一般来自文件操作相关的接口 | 请参考 errno |
core | WCDB Swift 错误,来自 WCDB Swift Core 层 | 请参考错误信息 message 的描述 |
interface | WCDB Swift 错误,来自 WCDB Swift Interface 层 | 请参考错误信息 message 的描述 |
abort | 开发阶段错误,一般是开发阶段错误,应当在发布前修复 | 请参考错误信息 message 的描述 |
warning | 警告信息,开发者可自行判断是否修复 | 请参考错误信息 message 的描述 |
SQLiteGlobal | SQLite log,不一定是错误 | 请参考 SQLite 的相关文档 |
SQLiteGlobal
和SQLite
的输出信息会有较多重复,而前者除了错误信息,还会输出部分 SQLite 内部的 log。因此其可以作为 debug log,而 SQLite 作为 error log。当信息只在SQLiteGlobal
中,而不在SQLite
中出现时,一般可忽略。
除此之外,WCDBSwift.Error
还包含了 tag
、path
、operation
、message
、SQL
、extended code
等相关信息,以便于调试和发现问题。