-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Java|Kotlin 监控与错误处理
qiuwenchen edited this page Mar 7, 2024
·
1 revision
本文介绍对性能数据、SQL执行、错误信息的监控,以及对错误处理信息的处理。
开发者可以注册全局监控,获取性能数据、SQL的执行及报错信息。
以下是性能监控的示例代码:
//Java
//全局监控
Database.globalTracePerformance(new Database.PerformanceTracer() {
@Override
public void onTrace(long tag, String path, long handleId, String sql, Database.PerformanceInfo info){
System.out.print("The handle with id " + handleId + " at path " + path +
" takes " + info.costInNanoseconds + " nanoseconds to execute sql " + sql + ")");
}
});
//监控单个数据库
database.tracePerformance(new Database.PerformanceTracer() {
@Override
public void onTrace(long tag, String path, long handleId, String sql, Database.PerformanceInfo info){
System.out.print("The handle with id " + handleId + " at path " + path +
" takes " + info.costInNanoseconds + " nanoseconds to execute sql " + sql + ")");
}
});
//Kotlin
//全局监控
Database.globalTracePerformance { tag, path, handleId, sql, info ->
print("The handle with id $handleId at path $path " +
"takes ${info.costInNanoseconds} nanoseconds to execute sql $sql )")
}
//监控单个数据库
database.tracePerformance { tag, path, handleId, sql, info ->
print("The handle with id $handleId at path $path " +
"takes ${info.costInNanoseconds} nanoseconds to execute sql $sql )")
}
监控回调的 info
参数中还可以获取到当前SQL语句执行时读写到的各个类型的文件页的数量,可以进一步分析耗时的原因。
性能监控会影响数据库性能,WCDB 默认不开启性能监控。
以下是 SQL 监控的示例代码:
//Java
//全局监控
Database.globalTraceSQL(new Database.SQLTracer() {
@Override
public void onTrace(long tag, String path, long handleId, String sql, String info) {
System.out.print("The handle with id " + handleId + " at path " + path +
" executed sql " + sql + ")");
}
});
//监控单个数据库
database.traceSQL(new Database.SQLTracer() {
@Override
public void onTrace(long tag, String path, long handleId, String sql, String info) {
System.out.print("The handle with id " + handleId + " at path " + path +
" executed sql " + sql + ")");
}
});
//Kotlin
//全局监控
Database.globalTraceSQL { tag, path, handleId, sql, info ->
print("The handle with id " + handleId + " at path " + path +
" executed sql " + sql + ")")
}
//监控单个数据库
database.traceSQL { tag, path, handleId, sql, info ->
print("The handle with id " + handleId + " at path " + path +
" executed sql " + sql + ")")
}
每一条执行的 SQL 都会毫无遗漏的在监控中体现。对于熟悉 SQLite 的开发者,可以通过该接口确认操作执行的 SQL 与期望是否一致。
监控回调中的 info
参数在调用setFullSQLTraceEnable(boolean)
开启全监控模式之后,会携带 SQL 执行的绑定参数,插入的数据的rowid,更新、删除、查询到的数据条数等执行的细节数据,更方便开发者了解数据的变化过程。
SQL监控会带来性能消耗,WCDB 默认不开启 SQL 监控。
以下是错误监控的示例代码:
//Java
//全局监控
Database.globalTraceException(new Database.ExceptionTracer() {
@Override
public void onTrace(WCDBException exception) {
assert exception.level != WCDBException.Level.Fatal;
System.out.print(exception);
}
});
//监控单个数据库
database.traceException(new Database.ExceptionTracer() {
@Override
public void onTrace(WCDBException exception) {
assert exception.level != WCDBException.Level.Fatal;
System.out.print(exception);
}
});
//Kotlin
//全局监控
Database.globalTraceException { exception ->
assert(exception.level != WCDBException.Level.Fatal)
print(exception)
}
//监控单个数据库
database.traceException { exception ->
assert(exception.level != WCDBException.Level.Fatal)
print(exception)
}
每一个错误信息都会在监控中体现,并且在出错时同步回调到监控接口。开发者可以注册该接口将错误输出到日志,和上报到后台进行监控。
所有错误都是 WCDBException
类型,它会包含了error level
、code
、extended code
、message
、 tag
、path
、SQL
等相关信息,以便于调试、统计归类和发现问题,其中错误码主要是SQLite的错误码。
错误监控其实也作为 WCDB 的日志输出接口,输出一些数据库的内部关键状态,只不过传出的 WCDBException
的 level
为Notice
、Ignore
或Debug
。
我们推荐开发者开启错误监控,以便于发现错误。
除了上述的错误监控,错误还会从函数声明包含 throws
中产生。
//Java
try {
database.insertObject(sample, DBSample.allFields(), "sampleTable");
} catch (WCDBException e) {
// 可以输出一些业务数据相关的错误日志
// error推荐在监控回调中统一输出到日志
}
//Kotlin
try {
database.insertObject<Sample>(sample, DBSample.allFields(), "sampleTable")
} catch (e: WCDBException) {
// 可以输出一些业务数据相关的错误日志
// error推荐在监控回调中统一输出到日志
}
- 欢迎使用 WCDB
- 基础教程
- 进阶教程
- 欢迎使用 WCDB
- 基础教程
- 进阶教程
- 欢迎使用 WCDB
- 基础教程
- 进阶教程
- 欢迎使用 WCDB
- 基础教程
- 进阶教程