You need to enable JavaScript to run this app.
文档中心
应用性能监控全链路版

应用性能监控全链路版

复制全文
下载 pdf
Android SDK 接入
使用高阶功能
复制全文
下载 pdf
使用高阶功能
除了崩溃分析、启动分析、卡顿分析等常用的功能外,SDK还支持一些增强功能。您可以根据业务需求选择是否接入这些功能。​
自定义日志和APMPlus日志​
自定义日志的三个使用场景:崩溃日志上报、日志回捞以及主动上报。​
注意​
自定义日志的字符串最大限制为4*1024个字符。​
主动上报​
  1. 初始化SDK时,打开自定义日志。​
  • ​
    //打开自定义日志回捞能力​
    builder.enableLogRecovery(true);​
    //打开APMPlus日志 打点,可以通过回捞获取​
    builder.enableAPMPlusLocalLog(true);​
    ApmInsight.getInstance().init(this, builder.build());​
    //初始化自定日志,配置自定义日志最大占用磁盘,内部一般配置20,代表最大20M磁盘占用。1.4.1版本开始存在这个能力​
    VLog.init(this,20);​
    ​
  1. 主动上报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) {​
    }​
    ​
  1. 主动上报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。​
  1. 在自定义文件页面,根据DID或User ID查询日志文件。​
崩溃时主动上报​
  1. 初始化SDK时,打开自定义日志。​
  • ​
    //打开自定义日志回捞能力​
    builder.enableLogRecovery(true);​
    //APMPlus日志 采集打开​
    builder.enableAPMPlusLocalLog(true);​
    ApmInsight.getInstance().init(this, builder.build());​
    //初始化自定日志,配置自定义日志最大占用磁盘,内部一般配置20,代表最大20M磁盘占用。1.4.1版本开始存在这个能力​
    VLog.init(this,20);​
    ​
  1. 在SDK上报配置页面崩溃分析里,配置是否上传自定义日志。​
  1. 在崩溃详情页面的自定义日志下,查看通过Vlog类打印的日志。​
日志回捞​
用户出现问题需要日志排查时,通过回捞端上通过自定义日志Vlog打印的日志来排查问题。​
  1. 初始化SDK时,打开自定义日志。​
  • ​
    //打开自定义日志回捞能力​
    builder.enableLogRecovery(true);​
    //APMPlus日志 采集打开​
    builder.enableAPMPlusLocalLog(true);​
    ApmInsight.getInstance().init(this, builder.build());​
    //初始化自定日志,配置自定义日志最大占用磁盘,内部一般配置20,代表最大20M磁盘占用。1.4.1版本开始存在这个能力​
    VLog.init(this,20);​
    ​
  1. 通过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);​
    ​
  1. 通过日志回捞页面新建任务,输入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 可以为任意字符串(不可过长),可用于筛选;不传 type(或传空字符串)时,平台默认按 EnsureNotReachHere 类型归类。​
​
/**​
* @param message message(现场数据展示)​
* @param type 类型(列表错误类型展示),为空时默认 EnsureNotReachHere​
* @param throwable 异常对象,错误的定位(类名/方法/行号)取其堆栈首帧​
*/​
public void reportCustomErr(String message, String type, Throwable throwable)​
​
/**​
* @param message message(现场数据展示)​
* @param type 类型(列表错误类型展示),为空时默认 EnsureNotReachHere​
* @param throwable 异常对象,错误的定位(类名/方法/行号)取其堆栈首帧​
* @param data 自定义数据(现场数据展示)​
*/​
public void reportCustomErr(String message, String type, @NonNull Throwable throwable, @Nullable Map<String, String> data)​
​
/**​
* 自定义堆栈上报。适用于没有现成 Throwable、或希望错误定位到指定代码位置的场景:​
* 由调用方传入完整调用栈数组和定位帧下标,定位帧之前的包装层堆栈会被剥掉。​
* 需要 apm_insight_crash 1.4.5 及以上版本。​
*​
* @param stackTraceElements 完整调用栈数组,通常在调用点通过 Thread.currentThread().getStackTrace() 获取​
* @param stackDepth 定位帧在数组中的下标。错误的定位(类名/方法/行号)取该帧,​
* 展示的完整堆栈也从该帧开始拼接​
* @param message message(现场数据展示)​
* @param type 类型(列表错误类型展示),为空时默认 EnsureNotReachHere​
* @param data 自定义数据(现场数据展示)​
*/​
public void reportCustomErr(StackTraceElement[] stackTraceElements, int stackDepth,​
@Nullable String message, String type, @Nullable Map<String, String> data)​
​
例如:​
​
MonitorCrash crash = 初始化返回的MonitorCrash实例​
crash.reportCustomErr("test err", "type1", new RuntimeException());​
​
使用自定义堆栈重载时,stackDepth 需指向业务出错的那一帧,跳过 getStackTrace 与上报方法自身的包装层;数组为空或下标无效时本条不上报。例如:​
​
public static void reportMyError(MonitorCrash crash, String message) {​
// 取当前线程完整调用栈​
StackTraceElement[] stack = Thread.currentThread().getStackTrace();​
// 下标 3 为业务出错位置,需根据实际包装层数调整​
crash.reportCustomErr(stack, 3, message, "type1", null);​
}​
​
启动自定义打点​
设置最大启动时间阈值​
​
builder.setMaxLaunchTime();​
//设置最大的启动时长上报阀值,单位毫秒。内部默认值15秒:APP_LAUNCH_MAX_LIMIT_MS = 15 * 1000L​
​
自定义启动节点​
启动监控支持自定义打点,方法需要配对出现。​
在Application的onCreate和首个Activity的onResume之间,添加以下代码,配置自定义打点。​
​
LaunchTrace.startSpan("initData");​
LaunchTrace.endSpan("initData");​
​
添加上述代码后,可以在启动分析的启动节点耗时中查看自定义打点的耗时。​
​Image​​
自定义启动结束点​
默认启动监控通过插桩代码来实现,结束点为第一个页面的onResume,如下方法支持自定义结束点。​
​
//初始化设置启动监控自定义上报,表示使用reportLaunchEnd()方法定义启动结束点​
LaunchTrace.customLaunchEnd(true);​
//启动自定义监控结束时间点,代表启动的结束点​
LaunchTrace.reportLaunchEnd();​
​
全链路监控​
业务接入应用性能监控后,客户端进行如下配置,开启全链路监控。更多信息,请参见全链路监控。​
​
ApmInsightInitConfig.Builder builder = ApmInsightInitConfig.builder();​
//打开全链路监控的能力,会在请求里注入trace_id,并在网络监控上报到服务器,通过trace_id可以和接入了应用性能监控的后端数据打通,达到全链路监控的目标​
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)​
​
​
最近更新时间:2026.10.15 20:24:46
这个页面对您有帮助吗?
有用
有用
无用
无用