-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Objc 监控与错误处理
本文介绍对性能数据、SQL执行、错误信息的监控,以及对错误处理信息的处理。
开发者可以注册三种监控,分别获取性能数据、SQL的执行及报错信息,这三种监控都支持全局监控和单个数据库监控两种范围。
以下是性能监控的示例代码:
//全局监控
[WCTDatabase globalTracePerformance:^(WCTTag tag, NSString* path, UInt64 handleId,
NSString* sql, WCTPerformanceInfo* info) {
NSLog(@"The handle with id %llu at path %@ takes %lld nanoseconds to execute sql %@",
handleId, path, info.costInNanoseconds, sql);
}];
//监控单个数据库
[database tracePerformance:^(WCTTag tag, NSString* path, UInt64 handleId,
NSString* sql, WCTPerformanceInfo* info) {
NSLog(@"The handle with id %llu at path %@ takes %lld nanoseconds to execute sql %@",
handleId, path, info.costInNanoseconds, sql);
}];
监控回调的 info
参数中还可以获取到当前SQL语句执行时读写到的各个类型的文件页的数量,可以进一步分析耗时的原因。
性能监控会影响数据库性能,WCDB 默认不开启性能监控。
以下是 SQL 监控的示例代码:
//全局监控
[WCTDatabase globalTraceSQL:^(WCTTag tag, NSString *path, uint64_t handleId, NSString *sql, NSString *info) {
NSLog(@"The handle with id %llu at path %@ executed sql %@", handleId, path, sql);
}];
//监控单个数据库
[database traceSQL:^(WCTTag tag, NSString *path, uint64_t handleId, NSString *sql, NSString *info) {
NSLog(@"The handle with id %llu at path %@ executed sql %@", handleId, path, sql);
}];
每一条执行的 SQL 都会毫无遗漏的在监控中体现。对于熟悉 SQLite 的开发者,可以通过该接口确认操作执行的 SQL 与期望是否一致。
监控回调中的 info
参数在调用enableFullSQLTrace:
开启全监控模式之后,会携带 SQL 执行的绑定参数,插入的数据的rowid,更新、删除、查询到的数据条数等执行的细节数据,更方便开发者了解数据的变化过程。
SQL监控会带来性能消耗,WCDB 默认不开启 SQL 监控。
以下是错误监控的示例代码:
//全局监控
[WCTDatabase globalTraceError:^(WCTError *error) {
assert(error.level != WCTErrorLevelFatal);
NSLog(@"%@", error);;
}];
//监控单个数据库
[database traceError:^(WCTError *error) {
assert(error.level != WCTErrorLevelFatal);
NSLog(@"%@", error);;
}];
每一个错误信息都会在监控中体现,并且在出错时同步回调到监控接口。开发者可以注册该接口将错误输出到日志,和上报到后台进行监控。
所有错误都是 WCTError
类型,它会包含了error level
、code
、extended code
、message
、 tag
、path
、SQL
等相关信息,以便于调试、统计归类和发现问题,其中错误码主要是SQLite的错误码。
在执行数据库操作时,都会在返回值中体现这个操作是否执行成功。如果执行失败的话,建议开发这不用在现场判断错误类型或者输出数据库错误日志,一方面即便判断了错误类型,一般也无法在现场补救,另一方面在现场输出数据库错误日志的话,会导致错误输出的逻辑遍布数据库操作代码的各个角落,带来冗余代码,只需要使用监控接口统一输出就行。
错误监控其实也作为 WCDB 的日志输出接口,输出一些数据库的内部关键状态,只不过传出的 WCTError
的 errorLevel
为WCTErrorLevelNotice
、WCTErrorLevelIgnore
或WCTErrorLevelDebug
。
我们推荐开发者开启错误监控,以便于发现错误。
- 欢迎使用 WCDB
- 基础教程
- 进阶教程
- 欢迎使用 WCDB
- 基础教程
- 进阶教程
- 欢迎使用 WCDB
- 基础教程
- 进阶教程
- 欢迎使用 WCDB
- 基础教程
- 进阶教程