750 Star 2.7K Fork 1.2K

GVPdromara/mendmix-cloud

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
OkHttp3Advice.java 2.31 KB
一键复制 编辑 原始数据 按行查看 历史
vakinge 提交于 2024-09-08 16:30 +08:00 . 修改包名为org.dromara
/**
*
*/
package org.dromara.mendmix.logging.tracelog.advice;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import org.dromara.mendmix.common.CustomRequestHeaders;
import org.dromara.mendmix.common.util.CachingFieldUtils;
import org.dromara.mendmix.logging.tracelog.TraceAdviceDefine;
import org.dromara.mendmix.logging.tracelog.TraceSpan;
import org.dromara.mendmix.logging.tracelog.TraceType;
import net.bytebuddy.asm.Advice;
import net.bytebuddy.description.method.MethodDescription;
import net.bytebuddy.description.type.TypeDescription;
import net.bytebuddy.matcher.ElementMatcher;
import net.bytebuddy.matcher.ElementMatcher.Junction;
import net.bytebuddy.matcher.ElementMatchers;
import okhttp3.Request;
/**
* <br>
*
* @author vakinge
* @date 2024年5月6日
*/
public class OkHttp3Advice extends BaseApmAdvice implements TraceAdviceDefine {
private static final String ORIGINAL_REQUEST_KEY = "originalRequest";
@Override
public Junction<TypeDescription> typeMatcher() {
return ElementMatchers.named("okhttp3.internal.connection.RealCall");
}
@Override
public ElementMatcher<? super MethodDescription> methodMatcher() {
return ElementMatchers.named("execute").or(ElementMatchers.named("enqueue"));
}
@Advice.OnMethodEnter
public static void onMethodEnter(@Advice.Local("traceSpan") TraceSpan span, @Advice.This Object target,
@Advice.Origin Method method) throws Throwable {
span = startTrace(TraceType.http, method, null);
if (span != null) {
Field field = CachingFieldUtils.getField(target.getClass(), ORIGINAL_REQUEST_KEY);
Request request = (Request) field.get(target);
span.setTraceKey(request.url().toString());
if (request.header(CustomRequestHeaders.HEADER_TRACE_LOGGING) != null) {
Request newRequest = request.newBuilder().headers(request.headers())
.addHeader(CustomRequestHeaders.HEADER_REQUEST_ID, span.getTraceId())
.addHeader(CustomRequestHeaders.HEADER_TRACE_LOGGING, String.valueOf(true)).build();
field.set(target, newRequest);
}
}
}
@Advice.OnMethodExit(onThrowable = Throwable.class)
public static void onMethodExit(@Advice.Local("traceSpan") TraceSpan span, @Advice.Thrown Throwable throwable)
throws Throwable {
if (span != null) {
endTrace(span, throwable);
}
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Java
1
https://gitee.com/dromara/mendmix-cloud.git
git@gitee.com:dromara/mendmix-cloud.git
dromara
mendmix-cloud
mendmix-cloud
5c3a021abc3eb782598f0303e9d9af2400d88f65

搜索帮助