import com.alibaba.dubbo.common.Constants;
import com.alibaba.dubbo.common.extension.Activate;
import com.alibaba.dubbo.rpc.*;
import com.bwton.ttsp.pay.common.util.TraceIDUtils;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.MDC;
/**
* TokenInvokerFilter
*
* @author william.liangf
*/
@Slf4j
@Activate(group = {Constants.CONSUMER, Constants.PROVIDER})
public class TraceIDFilter implements Filter {
private static final String TRACE_ID = "traceId";
public static Gson getGson() {
return new GsonBuilder().setDateFormat("yyyy-MM-dd HH🇲🇲ss").create();
}
@Override
public Result invoke(Invoker<?> invoker, Invocation invocation)
throws RpcException {
// if (invocation.getAttachment(TRACE_ID) != null) {
// TraceIDUtils.setTraceId(invocation.getAttachment(TRACE_ID));
// String mdcData = invocation.getAttachment(TRACE_ID);
// MDC.put(TRACE_ID, mdcData);
// } else if (TraceIDUtils.getTraceId() != null) {
// invocation.getAttachments().put(TRACE_ID, TraceIDUtils.getTraceId());
// }
if (invocation.getAttachment(TRACE_ID) != null) {
MDC.put(TRACE_ID, invocation.getAttachment(TRACE_ID));
} else{
String trace = (int)(Math.random()*9000+1000)+"";
invocation.getAttachments().put(TRACE_ID, trace);
MDC.put(TRACE_ID, trace);
}
return invoker.invoke(invocation);
}
}
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日誌消息,%n是換行符-->
<pattern>%d{yyyy-MM-dd HH🇲🇲ss.SSS} [%thread][%X{traceId}] %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
traceIdFilter=com.bwton.ttsp.pay.common.filter.TraceIDFilter