@Override
  public InvocationHandler create(Target target, Map<Method, MethodHandler> dispatch) {
    final Class clientClass = target.type();

    final InvocationHandler invocationHandle = invocationHandler.create(target, dispatch);
    return (proxy, method, args) -> {
      if (JAVA_OBJECT_METHODS.contains(method.getName()) || Util.isDefault(method)) {
        LOG.trace("Skipping metrics for method={}", method);
        return invocationHandle.invoke(proxy, method, args);
      }

      try (final Context classTimer =
          metricRegistry
              .timer(
                  metricName.metricName(clientClass, method, target.url()),
                  metricSuppliers.timers())
              .time()) {

        return invocationHandle.invoke(proxy, method, args);
      } catch (final FeignException e) {
        metricRegistry
            .meter(
                metricName
                    .metricName(clientClass, method, target.url())
                    .resolve("http_error")
                    .tagged("http_status", String.valueOf(e.status()))
                    .tagged("error_group", e.status() / 100 + "xx"),
                metricSuppliers.meters())
            .mark();

        throw e;
      } catch (final Throwable e) {
        metricRegistry
            .meter(
                metricName
                    .metricName(clientClass, method, target.url())
                    .resolve("exception")
                    .tagged("exception_name", e.getClass().getSimpleName())
                    .tagged(
                        "root_cause_name",
                        ExceptionUtils.getRootCause(e).getClass().getSimpleName()),
                metricSuppliers.meters())
            .mark();

        throw e;
      }
    };
  }
Methods that are declared by super class object and, if invoked, we don't wanna record metrics
for
dropwizard-metrics5/src/main/java/feign/metrics5/MeteredInvocationHandleFactory.java