南京网站做的好的公司,猪八戒网站做推广怎么样,网站图片设置教程,汽车推广方式有哪些对于Skywalking Agent customize-enhance-trace 大家应该不陌生了#xff0c;主要支持以非入侵的方式按用户自定义的Span跟踪对应的应用方法#xff0c;并获取数据。 参考https://skywalking.apache.org/docs/skywalking-java/v9.0.0/en/setup/service-agent/java-agent/cust…对于Skywalking Agent customize-enhance-trace 大家应该不陌生了主要支持以非入侵的方式按用户自定义的Span跟踪对应的应用方法并获取数据。 参考https://skywalking.apache.org/docs/skywalking-java/v9.0.0/en/setup/service-agent/java-agent/customize-enhance-trace/
规则如下 但实际应用的时候会遇到待拦截的方法参数类型非常复杂例如
enhanced
class class_namecom.seckill.seckillentity.seckill.seckillServiceImpl
...
method methodupdateStdOrder(com.seckill.seckillentity.std.StdOrderMsg) operation_name/updateStdOrder staticfalse
...
/method
/class
/enhanced表示订单信息com.seckill.seckillentity.std.StdOrderMsg 的类包含订单号关联的用户编号和商品信息而商品信息实际上是一个Hashmap类型
package com.seckill.seckillentity.std;
import java.io.Serializable;public class StdOrderMsg implements Serializable{private String order_id;private Integer user_id;private LightFieldMap fields new LightFieldMap();public String getOrder_id() {return order_id;}public void setOrder_id(String ordId){order_idordId;}public Integer getUser_id() {return user_id;}public void setUser_id(Integer userId) {user_id userId;}public LightFieldMap getFields() {return this.fields;}public void setFields(LightFieldMap lightFields) {fields lightFields;}public String toString() {...}
而HashMap 由嵌套一层 fields
public class LightFieldMap implements Serializable {private final MapString, Object fields new HashMap();private final MapString, ListLightFieldMap groups new HashMap();public LightFieldMap() {}...public Object getFieldValue(String fName) {return this.fields.get(fName);}public void setFieldValue(String fName, Object value) {this.fields.put(fName, value);}...但需求是要拦截到商品信息具体数据商品编号、价格、购买量等等… 也就是说要获取Hashmap内部fields具体域对应的据该如何定义Tag表达式呢
起初按SW提供用户手册尝试例如获取价格 arg[0].getFields().[‘price’] 但拦截的结果 pricenull 然后尝试把Hashmap类用toString方法打印出来 arg[0].getFields().toString() 发现可以获取清晰包信息 观察该对象的结构就很容易想到按以下方式获取
tag keypidarg[0].getFields().fields.pid/tag
tag keypricearg[0].getFields().fields.buy_price/tag
tag keystockarg[0].getFields().fields.buy_count/tag测试成功
总结 对于复杂类需要研究应用具体数据结构如果是结构体嵌套可以用A.B.C… 以此类推但如果中间套了一层类似于HashMap对象那就需要用类对应方法把该对象获取然后再按结构体处理A.fun().B.C…如果没有把握可以通过A.fun(),toString()把数据集拦截出来然后再根据实际情况处理。