FinClip为企业提供小程序生态圈技术产品,开发者可在FinClip小程序开发帮助中心找到相关FinClip小程序指引

# 小程序信息管理

# 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配置。
      • 一旦设置该类,则配置项中的setLogMaxAliveSecsetXLogDir等配置项将会失效,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 视图层小程序加载耗时
      © FinClip with ❤ , Since 2017