除了崩溃分析、启动分析、卡顿分析等常用的功能外,SDK还支持一些增强功能。您可以根据业务需求选择是否接入这些功能。
自定义日志的三个使用场景:崩溃日志上报、日志回捞以及主动上报。
注意
自定义日志的字符串最大限制为4*1024个字符。
初始化SDK时,打开自定义日志。
//打开自定义日志回捞能力 builder.enableLogRecovery(true); //打开APMPlus日志 打点,可以通过回捞获取 builder.enableAPMPlusLocalLog(true); ApmInsight.getInstance().init(this, builder.build()); //初始化自定日志,配置自定义日志最大占用磁盘,内部一般配置20,代表最大20M磁盘占用。1.4.1版本开始存在这个能力 VLog.init(this,20);
主动上报Vlog日志文件。
//示例:上传当前时间前10分钟的vlog日志。 ApmInsightAgent.uploadVlog(System.currentTimeMillis() - 1000 * 60 * 10, System.currentTimeMillis()); /** * Vlog日志 主动上报 * * @param start 起始时间 毫秒 * @param end 结束时间 毫秒 */ public static void uploadVlog(long start, long end) { }
主动上报APMPlus日志。
//示例:上传当前时间前10分钟的APMPlus日志。 ApmInsightAgent.uploadAPMPlusLog(System.currentTimeMillis() - 1000 * 60 * 10, System.currentTimeMillis(),null); /** * APMPlus日志 主动上报 * * @param start 起始时间 毫秒 * @param end 结束时间 毫秒 * @param callback 成功失败的回调 */ public static void uploadAPMPlusLog(long start, long end, IALogActiveUploadCallback callback) { } /** * APMPlus日志和业务Vlog日志 主动上报 * * @param start 毫秒 * @param end 毫秒 * @param callback 成功失败的回调 */ public static void uploadAPMPlusAndVlog(long start, long end, IALogActiveUploadCallback callback) { }
日志文件比较大,一次上报大约会消耗200事件量。日志文件按照大小生成新文件,单个文件最大不超过2M。
在自定义文件页面,根据DID或User ID查询日志文件。
初始化SDK时,打开自定义日志。
//打开自定义日志回捞能力 builder.enableLogRecovery(true); //APMPlus日志 采集打开 builder.enableAPMPlusLocalLog(true); ApmInsight.getInstance().init(this, builder.build()); //初始化自定日志,配置自定义日志最大占用磁盘,内部一般配置20,代表最大20M磁盘占用。1.4.1版本开始存在这个能力 VLog.init(this,20);
在SDK上报配置页面崩溃分析里,配置是否上传自定义日志。
在崩溃详情页面的自定义日志下,查看通过Vlog类打印的日志。
用户出现问题需要日志排查时,通过回捞端上通过自定义日志Vlog打印的日志来排查问题。
初始化SDK时,打开自定义日志。
//打开自定义日志回捞能力 builder.enableLogRecovery(true); //APMPlus日志 采集打开 builder.enableAPMPlusLocalLog(true); ApmInsight.getInstance().init(this, builder.build()); //初始化自定日志,配置自定义日志最大占用磁盘,内部一般配置20,代表最大20M磁盘占用。1.4.1版本开始存在这个能力 VLog.init(this,20);
通过API打点自定义日志。
// com.apm.insight.VLog; VLog.v(String tag, String msg); VLog.d(String tag, String msg); VLog.i(String tag, String msg); VLog.w(String tag, String msg); VLog.e(String tag, String msg); // 也可以通过接口来设置生效的日志级别 VLog.changeLevel(com.apm.insight.LogLevel.WARN);
通过日志回捞页面新建任务,输入DID或UID回捞指定用户的自定义日志排查问题。
UID初始化时配置
@Override public String getUserId() { //可选。用户的唯一标识,支持用户自定义user_id把平台数据和自己用户关联起来。getUserId是回调类的参数可以初始化后再设置。 return "userid"; }
DID初始化时配置
@Override public String getDid() { //1.4.0版本及以上,可选,其他版本必填,设备的唯一标识。如果依赖AppLog可以通过 AppLog.getDid() 获取。也可以自己生成。 return null; }
如果DID返回的是null,可以通过UID的配置进行日志回捞。
回捞支持自定义回捞,用户输入自定义回捞参数,这里可以根据参数返回想要回捞的结果。
//可选,自定义回捞设置 ApmInsightAgent.setRecoveryTemplate(new ITemplateConsumer() { @Override public CustomResult handleTemplateMessage(JSONObject template) { //template 是平台配置的 【自定义回捞参数】 if (template != null) { String type = template.optString("type"); if (!TextUtils.isEmpty(type)) { if (type.equals("type_one")) { //返回type_one 回捞的结果 HashMap<String, String> result = new HashMap<>(); result.put("result", "获取文件成功"); //result平台会直接展示,file平台支持下载 CustomResult customResult = new CustomResult(result, application.getFilesDir()); //返回的回捞结果 return customResult; } else if (type.equals("type_two")) { //返回type_two 回捞的结果 return null; } } } return null; } });
崩溃的时候会上报很多数据,如果用户想上报一些自定义的数据,在崩溃的时候一起上报,可以参见下文的示例代码。
配置其他崩溃字段,包括渠道、版本号等所有自定义字段。
public Config config()
崩溃组件的自定义维度:
public MonitorCrash addTags(String key, String value)
性能组件的自定义维度:上报的tag可以在日志查询或者原始日志文件里查询。
//示例 ApmInsightAgent.addPerfTag("tag_test","tag_1"); /** * 性能数据增加tag * @param key * @param value */ public static void addPerfTag(@NonNull String key, @NonNull String value) { } /** * 性能数据移除tag * @param key * @param value */ public static void removePerfTag(@NonNull String key, @Nullable String value) { }
参数message、type可以为任意字符串(不可过长),可用于筛选。
/** * @param message message(现场数据展示) * @param type 类型(列表错误类型展示) * @param throwable */ public void reportCustomErr(String message, String type, Throwable throwable) /** * @param message message(现场数据展示) * @param type 类型(列表错误类型展示) * @param throwable * @param data 自定义数据(现场数据展示) */ public void reportCustomErr(String message, String type, Throwable throwable, @Nullable Map<String, String> data)
例如:
MonitorCrash crash = 初始化返回的MonitorCrash实例 crash.reportCustomErr("test err", "type1", new RuntimeException());
builder.setMaxLaunchTime(); //设置最大的启动时长上报阀值,单位毫秒。内部默认值15秒:APP_LAUNCH_MAX_LIMIT_MS = 15 * 1000L
启动监控支持自定义打点,方法需要配对出现。
在Application的onCreate和首个Activity的onResume之间,添加以下代码,配置自定义打点。
LaunchTrace.startSpan("initData"); LaunchTrace.endSpan("initData");
添加上述代码后,可以在启动分析的启动节点耗时中查看自定义打点的耗时。
默认启动监控通过插桩代码来实现,结束点为第一个页面的onResume,如下方法支持自定义结束点。
//初始化设置启动监控自定义上报,表示使用reportLaunchEnd()方法定义启动结束点 LaunchTrace.customLaunchEnd(true); //启动自定义监控结束时间点,代表启动的结束点 LaunchTrace.reportLaunchEnd();
业务接入APMPlus服务端监控后,客户端进行如下配置,开启全链路监控。更多信息,请参见全链路监控。
ApmInsightInitConfig.Builder builder = ApmInsightInitConfig.builder(); //打开全链路监控的能力,会在请求里注入trace_id,并在网络监控上报到服务器,通过trace_id可以和接入了APMPlus服务端监控的后端数据打通,达到全链路监控的目标 builder.enableNetTrace(true); ApmInsight.getInstance().start(builder.build());
注册崩溃后回调,可以在异常发生时进行回调,记录异常发生时的关键信息。
MonitorCrash 实例使用 /** * 发生异常时进行的回调,支持Java,Launch, Native和ANR异常的回调 * 便于业务扩展功能。 * * @param crashCallback 回调 * @param type 崩溃类型,不支持{@link CrashType#CUSTOM_JAVA} */ public void registerCrashCallback(ICrashCallback var1, CrashType var2) /** * 移除Crash的回调 * * @param crashCallback 回调 * @param type 崩溃类型,不支持{@link CrashType#CUSTOM_JAVA} */ public void unregisterCrashCallback(ICrashCallback var1, CrashType var2)