# 小程序信息管理
# 1. Log日志初始化配置
安卓SDK中的Log日志管理是随初始化配置项一起设置的。
// 是否开启日志,对日志控制的优先级最高
public Builder setEnableLog(boolean enableLog);
// 是否开启XLog的控制台日志,若为false,则仅持久化日志,不在控制台显示
// 该配置项仅在引入XLogSDK后才会生效
public Builder setEnableXLogConsole(boolean enableXLogConsole);
// 设置Log日志的等级,只有高于该等级的Log才会生效
public Builder setLogLevel(XLogLevel logLevel);
// 设置Log日志文件的存放文件夹,该配置项仅在引入XLogSDK后才会生效
public Builder setXLogDir(File xLogDir);
// 设置日志文件保留时间(默认10天,至少为1天),该配置项仅在引入XLogSDK后才会生效
// 在超过最长保留时间之后,应用启动后的1至2分钟内会将过期日志文件移除
public Builder setLogMaxAliveSec(long logMaxAliveSec);
示例代码:
FinAppConfig finAppConfig = new FinAppConfig.Builder()
// 开启日志,默认是false
.setEnableLog(true)
// 开启XLogSDK的控制台日志,默认是true
.setEnableXLogConsole(true)
// 设置日志等级,默认是XLogLevel.LEVEL_NONE
.setLogLevel(XLogLevel.LEVEL_VERBOSE)
// 自定义XLogSDK的日志文件目录,默认为 /data/data/${packageName}/files/fino_log
.setXLogDir(logDir)
// 自定义XLogSDK的日志文件最大留存时间,最小1天,默认为10天
.setLogMaxAliveSec(2 * 24 * 60 * 60)
// 其它配置项省略
.build();
FinAppClient.INSTANCE.init(application, finAppConfig, callback);
# 2. 运行时变更日志配置
从2.42.7
版本开始,SDK支持在运行时动态变更日志相关配置,以支持特殊情况下通过服务器控制日志开关等,以获取线上问题日志。
/**
* 更新日志相关配置
*
* @param enableLog 是否开启日志
* @param enableXLogConsole 是否在集成了XLogSDK的情况下将日志输出到控制台
* @param logLevel 日志等级
* @param logDir 在集成了XLogSDK的情况下日志文件保存的位置
* @param logMaxAliveSec 在集成了XLogSDK的情况下日志文件最大留存时间
*/
fun updateLogConfig(
context: Context,
enableLog: Boolean,
enableXLogConsole: Boolean,
logLevel: XLogLevel,
logDir: File,
logMaxAliveSec: Long
)
代码示例如下:
主进程
小程序进程
注意
- 在主进程里调用,后续启动的小程序均以变更后的日志配置启动,但正在运行的小程序无法生效,需要重新冷启动。
- 在小程序进程里调用,仅进程对应的小程序立即生效,不会影响主进程的日志配置以及后续启动的小程序。
# 3. 接管SDK内的日志记录系统
创建自己的日志记录类,并实现IAppletLogDelegate
接口,示例如下:
class LogDelegate : IAppletLogDelegate {
override fun logMessage(content: String) {
val file = getLogFile()
file.appendText("${content}\n")
}
}
在初始化SDK时,设置此日志记录类:
val finAppConfig = FinAppConfig.Builder()
// 其它配置项省略
.setLogDelegate(LogDelegate::class.java)
.build()
FinAppClient.init(application, finAppConfig, finCallback)
有相关日志信息产生时,会调用logMessage
方法,其中参数content
为完整日志内容,包含【日志时间】、【日志等级】【日志Tag】【日志详情】。
注意
- 该类的
logMessage
是否会接收到日志内容,取决于setLogLevel
方法中设置的日志等级以及enableLog
配置。 - 一旦设置该类,则配置项中的
setLogMaxAliveSec
、setXLogDir
等配置项将会失效,SDK将不会处理日志,均需要客户端自行处理。 - 该类将会在SDK运行时通过反射手段进行实例化,因此请务必包含且仅包含无参的构造方法。
- 该类的实例可能运行在不同进程中,因此若需要记录一些临时变量,请勿直接记录在该类内部,并且视情况做好进程判断处理。
# 4. 获取SDK内的性能统计记录
创建自己的性能统计记录类,并实现IAppletPerformanceRecordDelegate
接口,示例如下:
class PerformanceRecordDelegate : IAppletPerformanceRecordDelegate {
override fun appletReceivePerformanceRecords(
appInfo: FinAppInfo,
performance: Performance
) {
val file = getLogFile()
file.appendText("${Gson().toJson(performance)}\n")
}
}
在初始化SDK时,设置此性能统计记录类:
val finAppConfig = FinAppConfig.Builder()
// 其它配置项省略
.setPerformanceRecordDelegate(PerformanceRecordDelegate::class.java)
.build()
FinAppClient.init(application, finAppConfig, finCallback)
有相关性能统计记录产生时,会调用appletReceivePerformanceRecords
方法,其中参数包含了此条性能记录对应的小程序信息appInfo
,以及性能记录详情performance
类。
注意
- 该类将会在SDK运行时通过反射手段进行实例化,因此请务必包含且仅包含无参的构造方法。
- 该类的实例可能运行在不同进程中,因此若需要记录一些临时变量,请勿直接记录在该类内部,并且视情况做好进程判断处理。
性能统计记录关键字段说明:
entryType 指标类型 | name 指标名称 | 说明 |
---|---|---|
inner | processLaunch | 进程启动时间 |
navigation | appInfo | 小程序详情接口 |
loadPackage | downloadPackage | 下载小程序(开始) |
navigation | frameworkInfo | 基础库详情接口,开启了基础库预下载的情况不会有该条日志 |
loadPackage | downloadFramework | 下载基础库,开启了基础库预下载的情况不会有该条日志 |
loadPackage | unzipFramework | 解压基础库,开启了基础库预下载的情况不会有该条日志 |
loadPackage | downloadPackage | 下载小程序(完成) |
loadPackage | unzipApp | 解压小程序 |
navigation | appLaunch | 总启动耗时 |
script | frameworkLoad | 基础库加载 |
script | evaluateScript | 执行js代码 |
script | serviceLoad | 逻辑层执行耗时 |
render | frameworkRenderLoad | 视图层基础库加载耗时 |
render | viewRender | 视图层执行耗时 |
render | firstRender | 视图层小程序加载耗时 |