UAV支持方法级调用链,用户可以根据需要配置调用链中需要跟踪的方法以及需要捕获的入和参出参。ivc.data文件是方法级调用链配置文件。在打开调用链功能的情况下,UAV会从MOF对应的uavmof.metadata文件根目录下查找是否存在ivc.data文件。如果存在则读取并解析,根据配置完成自动注入和跟踪捕获。
ivc.data配置
ivc.data配置文件格式如下:
{
//appid,该配置生效的应用appid
"com.creditease.uav.monitorframework.buildFat":{
"classes": {
//类名,要添加方法级跟踪捕获的类
"com.creditease.monitorframework.fat.MyTestIVCInjectClass": {
//方法列表,要添加方法级跟踪捕获的方法列表,每个方法包含入参列表以及要求捕获的入参和出参列表
"methods":
[
// name为方法名,types为该方法入参列表(可为空数组),args为需要捕获的入参列表(从1开始)和出参(用-1表示)
// 需要捕获的入参和出参数据将会存储在调用链数据中,供前台页面展示
{name:"testMethod1",types:["String","MyTestInjectObj"],args:[1,-1]},
{name:"testMethod2",types:["String","MyTestInjectObj","boolean"],args:[1,2]},
{name:"testMethod3",types:["String","int"],args:[1,2,-1]},
{name:"testMethod4",types:["Integer"],args:[1,-1]},
{name:"testMethod5",types:["Double"],args:[1,-1]},
{name:"testMethod6",types:["Float"],args:[1,-1]},
{name:"testMethod7",types:["Boolean"],args:[1,-1]},
{name:"testMethod8",types:[],args:[]}
]
}
}
}
}
com.creditease.uav.monitorframework.buildFat : appid,需要添加方法级跟踪的应用的id,使用时修改为用户需要添加方法级跟踪的方法所属的应用的appid
classs: 类关键字,必填,固定为classs
com.creditease.monitorframework.fat.MyTestIVCInjectClass:需要添加方法级跟踪的方法所在的类,使用时修改为用户需要捕获的方法所在的类
methods: 方法关键字,必填,固定为methods,对应的值为需要添加方法级跟踪的方法列表
name : 方法名关键字,对应的值为需要需添加方法级跟踪的方法的方法名
types : 方法参数列表关键字,对应的值为该方法的入参类名列表,如果方法没有入参,写为空数组[]
args : 需要跟踪的入参和出参列表,数字1表示第一个入参,数字2表示第二个入参,依次类推,数字-1表示出参
以上配置表示需要监控当前UAV所在机器上应用id为com.creditease.uav.monitorframework.buildFat的应用中的类名为com.creditease.monitorframework.fat.MyTestIVCInjectClass的类中的testMethod1到testMethod9方法;其中testMethod1方法有两个入参,其类型分别为String和MyTestInjectObj,args:[1,-1]表示要捕获第1个入参(入参从1开始计数,即String参数)和出参(-1代表出参);testMethod1有三个入参分别为:String、MyTestInjectObj、boolean,args:[1,2]表示需要捕获第1个入参和第2个入参;testMethod8没有入参,也不需要捕获入参和出参。
效果示例
以下为ivc.data配置实例,共配置捕获三个方法:
{
"com.creditease.uav.monitorframework.buildFat":{
"classes": {
"com.creditease.monitorframework.fat.MyTestIVCInjectClass": {
"methods":
[
{"name":"testMethod1","types":["String","MyTestInjectObj"],"args":[1,2,-1]},
{"name":"testMethod1","types":["String","MyTestInjectObj","boolean"],"args":[1,2,3,-1]},
{"name":"testMethod2","types":["String","int"],"args":[1,2,-1]}
]
}
}
}
}
下图为以上ivc.data配置对应的前端调用链显示,共捕获三个方法(类型显示为M,如图中红色方框所示):testMethod1、testMethod1、testMethod2,与以上ivc.data配置相对应。
点击每个方法,将显示该方法的调用链数据详情,包括捕获的入参、出参、时间、所在类等信息,入参和出参都将通过toString转换为字符串显示,字符串显示的最大长度根据配置文件uav.properties中的配置com.creditease.uav.ivcdat.method.ret决定,没有配置时默认为2000。下图为testMethod1的某次调用的调用链数据详情,共捕获2个入参,入参数据之间用“;”分隔。第一个入参为String类型,为“1”;第二个参数为MyTestInjectObj对象,显示为com.creditease.monitorframework.fat.ivc.MyTestInjectObj@116bdeb2;出参为String类型,为“success”。