Log printing traceId when using Skywalking on SpringCloudGateway
AD |
SpringCloudGateway3.1.3 SkywalkingAgent8.10.0 Agent SpringCloudGatewayWebFluxskywalkingagentoptional-pluginsjarplugins apm-spring-webflux-5.x-plugin-8.10.0.jar apm-spring-cloud-gateway-3.x-plugin-8.10.0.jar Maven < dependency > < groupId > org.apache.skywalking </ groupId > < artifactId > apm-toolkit-log4j-2.x </ artifactId > < version > ${skywalking.version} </ version > </ dependency > < dependency > < groupId > org.apache.skywalking </ groupId > < artifactId > apm-toolkit-trace </ artifactId > < version > ${skywalking.version} </ version > </ dependency > pattern [%d{yyyy-MM-ddHH:mm:ss.SSS}][%traceId][%logger {36} ][%thread][%- 5 level]%msg%n -javaagent:D:workskywalking-agentskywalking-agent.jar=agent.service_name=xxx -Dskywalking.collector.backend_service=xxx:11800 Skywalking-ui TID [ 2022 -06 -15 14 : 53 : 19.958 ][TID:N/A] agent Skywalking-agent apm-spring-webflux-5.x-plugin-8.10.0.jar org.springframework.web.reactive.DispatcherHandler handle reactor< SKYWALKING_CONTEXT_SNAPSHOT-ContextSnapshot> traceIdreactorcontext traceId public static<T>Consumer<Signal<T>>logOnNext(Consumer<T>logStatement){ return signal->{ if (!signal.isOnNext()) return ;( 1 )Optional<String>toPutInMdc=signal.getContext().getOrEmpty( "CONTEXT_KEY" );( 2 )toPutInMdc.ifPresentOrElse(tpim->{ try (MDC.MDCCloseablecMdc=MDC.putCloseable( "MDC_KEY" ,tpim)){( 3 )logStatement.accept(signal. get ());( 4 )}},()->logStatement.accept(signal. get ()));( 5 )};} @GetMapping( "/byPrice" ) public Flux<Restaurant>byPrice( @RequestParam Double maxPrice, @RequestHeader(required=false,name= "X-UserId" ) StringuserId){StringapiId=userId== null ? "" :userId;( 1 ) return restaurantService.byPrice(maxPrice)).doOnEach(logOnNext(r->LOG.debug( "foundrestaurant{}for ${} " ,( 2 )r.getName(),r.getPricePerPerson()))).contextWrite(Context.of( "CONTEXT_KEY" ,apiId));( 3 )} traceId equals{pattern}{ test }{substitution}equalsIgnoreCase{pattern}{ test }{substitution} pattern [%d{yyyy-MM-ddHH:mm:ss.SSS}][TID:%equals{%X{traceId}}{}{N/A}][%logger{36}][%thread][%-5level]%msg%n onEachOperatorHooks @Component public class LogHooks { private static final StringKEY= "logMdc" ; @PostConstruct @SuppressWarnings ( "unchecked" ) public void setHook () {reactor.core.publisher.Hooks.onEachOperator(KEY,Operators.lift((scannable,coreSubscriber)-> new MdcSubscriber(coreSubscriber)));} @PreDestroy public void resetHook () {reactor.core.publisher.Hooks.resetOnEachOperator(KEY);}} public class MdcSubscriber implements CoreSubscriber { private static final StringTRACE_ID= "traceId" ; private static final StringSKYWALKING_CTX_SNAPSHOT= "SKYWALKING_CONTEXT_SNAPSHOT" ; private final CoreSubscriber<Object> actual ; public MdcSubscriber(CoreSubscriber<Object> actual ){ this . actual = actual ;} @Override public voidonSubscribe(Subscriptions){ actual .onSubscribe(s);} @Override public voidonNext(Objecto){Contextc= actual .currentContext();Optional<String>traceIdOptional=Optional.empty(); if (!c.isEmpty()&&c.hasKey(SKYWALKING_CTX_SNAPSHOT)){traceIdOptional=Optional.of(c. get (SKYWALKING_CTX_SNAPSHOT)).map(BeanUtil::beanToMap).map(t->t. get (TRACE_ID)).map(BeanUtil::beanToMap).map(t->t. get ( "id" )).map(Object::toString);} try (MDC.MDCCloseablecMdc=MDC.putCloseable(TRACE_ID,traceIdOptional.orElse( "N/A" ))){ actual .onNext(o);}} @Override public voidonError(Throwablethrowable){ actual .onError(throwable);} @Override public voidonComplete(){ actual .onComplete();} @Override public ContextcurrentContext(){ return actual .currentContext();}}SpringCloudGateway3.1
Disclaimer: The content of this article is sourced from the internet. The copyright of the text, images, and other materials belongs to the original author. The platform reprints the materials for the purpose of conveying more information. The content of the article is for reference and learning only, and should not be used for commercial purposes. If it infringes on your legitimate rights and interests, please contact us promptly and we will handle it as soon as possible! We respect copyright and are committed to protecting it. Thank you for sharing.(Email:[email protected])
Mobile advertising space rental |
Tag: Log printing traceId when using Skywalking on SpringCloudGateway
400 pilots collectively switch jobs in China, vowing never to return home and vowing to "serve" China?
NextPressure Test Report on Elasticsearch with Different Slice Settings
Guess you like
-
Youku's "Transformers" Film Production Vehicle: Entering Rainforests, Crossing Deserts, Creating a New Efficient Shooting Model for Film CrewsDetail
2024-09-21 18:33:55 1
- Detail
-
Apple iPhone 16 and Huawei Mate XT Tri-fold Phones Released on the Same Day: Who Will Win in a "Godly Battle" in Changsha Offline Stores?Detail
2024-09-21 16:18:55 1
- Detail
-
Has Your Personal Information Been Leaked? The Truth Behind Nuisance Calls and How to Protect YourselfDetail
2024-09-20 19:58:58 11
- Detail
-
iPhone 16 Debuts! Tmall Flagship Store's "More for the Same Price" Campaign Sparks Another Buying FrenzyDetail
2024-09-20 16:00:18 11
- Detail
- Detail
- Detail
-
Huawei's Tri-Fold Phone Gets "Bad Reviews": Chen Zhen Reviews with a Xiaomi Foldable and Says it's "Cool but I Probably Won't Use It Long-Term"Detail
2024-09-19 11:37:20 1
-
Python 3 Journey: 10 Lesser-Known Tips and Best Practices to Become a Better DeveloperDetail
2024-09-18 19:35:06 1
- Detail
- Detail
-
Is Buying a Phone Online Really Cheaper? A Physical Store Owner Reveals the "Inside Scoop": Stop Being Tricked!Detail
2024-09-18 16:46:11 1
- Detail
-
From a Stranger's Number to a Soul Mate: My Mobile Number "Inheritance" JourneyDetail
2024-09-16 03:06:20 11
-
Reproduction Under Weightlessness: How Can Humanity Perpetuate Civilization in Space?Detail
2024-09-15 23:18:12 11
- Detail
- Detail