code: public <T> CallbackBuilder delegateWithLogging(final Callback<T> callback, final Logger logger,
                                                     final String operationName) {
  
          this.withErrorHandler(throwable -> {
              logger.error(operationName + " ERROR ", throwable);
              callback.onError(throwable);
          });
  
          this.withTimeoutHandler(() -> {
              logger.error(operationName + " TIMED OUT ");
              callback.onTimeout();
          });
  
          return this;
      }
docs: Builder method to delegate timeout and error handling to other callback.
  
  @param callback      callback
  @param logger        logger
  @param operationName method name or thing you are doing.
  @param <T>           T
  @return this, fluent