package Ġorg . fe u ye ux . grpc Ċ Ċ import Ġio . grpc .* Ċ import Ġorg . apache . logging . log 4 j . kotlin . logger Ċ import Ġorg . fe u ye ux . grpc . Constants . context Keys Ċ import Ġorg . fe u ye ux . grpc . Constants . tracing Keys Ċ Ċ class ĠHeader Server Interceptor Ġ: ĠServer Interceptor Ġ{ ĊĠĠĠ Ġprivate Ġval Ġlogger Ġ= Ġlogger () ĊĠĠĠ Ġoverride Ġfun Ġ< Req T , ĠResp T > Ġintercept Call ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcall : ĠServer Call < Req T , ĠResp T >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Headers : ĠMetadata , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġserver Call Handler : ĠServer Call Handler < Req T , ĠResp T >): ĠServer Call . Listener < Req T > Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent Ġ= ĠContext . current () ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġtracing Keys . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtracing Key : ĠMetadata . Key < String > Ġ= Ġtracing Keys [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmetadata Ġ= Ġrequest Headers . get ( tracing Key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( metadata Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey : ĠContext . Key < String > Ġ= Ġcontext Keys ! ![ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" -> T Ġ${ key }:${ metadata }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Ġ= Ġcurrent . with Value ( key , Ġmetadata ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( key Name Ġin Ġrequest Headers . keys ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= ĠMetadata . Key . of ( key Name , ĠMetadata . ASCII _ STRING _ MAR SH ALL ER ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmetadata Ġ= Ġrequest Headers . get ( key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" -> H Ġ${ key . name ()} :${ metadata }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠContext s . intercept Call ( current , Ġcall , Ġrequest Headers , Ġserver Call Handler ) ĊĠĠĠ Ġ} Ċ }