func exchangeWithUpstream(u upstream.Upstream, req *dns.Msg) (*dns.Msg, time.Duration, error) {
	startTime := time.Now()
	reply, err := u.Exchange(req)
	elapsed := time.Since(startTime)
	if err != nil {
		log.Tracef("upstream %s failed to exchange %s in %d milliseconds. Cause: %s", u.Address(), req.Question[0].String(), elapsed, err)
	} else {
		log.Tracef("upstream %s successfully finished exchange of %s. Elapsed %d ms.", u.Address(), req.Question[0].String(), elapsed)
	}
	return reply, elapsed, err
}
// exchangeWithUpstream returns result of Exchange with elapsed time
exchangeWithUpstream returns result of Exchange with elapsed time
// exchangeWithUpstream returns result of Exchange with elapsed time
func exchangeWithUpstream(u upstream.Upstream, req *dns.Msg) (*dns.Msg, time.Duration, error) {
	startTime := time.Now()
	reply, err := u.Exchange(req)
	elapsed := time.Since(startTime)
	if err != nil {
		log.Tracef("upstream %s failed to exchange %s in %d milliseconds. Cause: %s", u.Address(), req.Question[0].String(), elapsed, err)
	} else {
		log.Tracef("upstream %s successfully finished exchange of %s. Elapsed %d ms.", u.Address(), req.Question[0].String(), elapsed)
	}
	return reply, elapsed, err
}
func exchangeWithUpstream ( u upstream . Upstream , req * dns . Msg ) ( * dns . Msg , time . Duration , error ) { startTime := time . Now ( ) reply , err := u . Exchange ( req ) elapsed := time . Since ( startTime ) if err != nil { log . Tracef ( " " , u . Address ( ) , req . Question [ 0 ] . String ( ) , elapsed , err ) } else { log . Tracef ( " " , u . Address ( ) , req . Question [ 0 ] . String ( ) , elapsed ) } return reply , elapsed , err }
exchangeWithUpstream returns result of Exchange with elapsed time
exchangeWithUpstream returns result of Exchange with elapsed time