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;
    }
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;
    }
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 ; }
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
Builder method to delegate timeout and error handling to other callback .