code: func (c *HTTPClient) Do(req *http.Request) (*http.Response, error) {
  	ctx := req.Context()
  	v := ctx.Value(RequestIDContextKey)
  	if v != nil {
  		req.Header.Set(requestIDHeader, v.(string))
  	}
  	st := time.Now()
  	resp, err := c.Client.Do(req)
  
  	logger := c.Logger
  	if logger == nil {
  		logger = log.DefaultLogger()
  	}
  
  	if err == nil && (c.Severity == 0 || !logger.Enabled(c.Severity)) {
  		// successful logs are suppressed if c.Severity is 0 or
  		// logger threshold is under c.Severity.
  		return resp, err
  	}
  
  	fields := FieldsFromContext(ctx)
  	fields[log.FnType] = "http"
  	fields[log.FnResponseTime] = time.Since(st).Seconds()
  	fields[log.FnHTTPMethod] = req.Method
  	fields[log.FnURL] = req.URL.String()
  	fields[log.FnStartAt] = st
  
  	if err != nil {
  		fields["error"] = err.Error()
  		logger.Error("well: http", fields)
  		return resp, err
  	}
  
  	fields[log.FnHTTPStatusCode] = resp.StatusCode
  	logger.Log(c.Severity, "well: http", fields)
  	return resp, err
  }
docs: // Do overrides http.Client.Do.
  //
  // req's context should have been set by http.Request.WithContext
  // for request tracking and context-based cancelation.