code: public void logUpload(
        String uploadContents,
        URI uploadUri,
        @Nullable BatchJobUploadResponse batchJobUploadResponse,
        @Nullable Throwable throwable) {
      RequestInfo requestInfo =
          new RequestInfo.Builder()
              .withServiceName("batchjobupload")
              .withContext(CONTEXT_NAME, null)
              .withUrl(uploadUri.toString())
              // Trim upload contents since the contents may be padded to the next multiple of 256K
              // bytes.
              .withPayload(Strings.nullToEmpty(uploadContents).trim())
              .build();
      ResponseInfo.Builder responseInfoBuilder = new ResponseInfo.Builder();
      if (batchJobUploadResponse != null) {
        responseInfoBuilder.withPayload(
            String.format(
                "%d %s%n",
                batchJobUploadResponse.getHttpStatus(),
                batchJobUploadResponse.getHttpResponseMessage()));
      }
      RemoteCallReturn remoteCallReturn =
          new RemoteCallReturn.Builder()
              .withRequestInfo(requestInfo)
              .withResponseInfo(responseInfoBuilder.build())
              .withException(throwable)
              .build();
      loggerDelegate.logRequestSummary(remoteCallReturn);
      loggerDelegate.logRequestDetails(remoteCallReturn);
    }
docs: Logs a batch job operations upload.
  
  @param uploadContents the contents of the upload.
  @param uploadUri the URI for the upload.
  @param batchJobUploadResponse the upload response.
  @param throwable the throwable that occurred during upload, or {@code null} if the upload
  succeeded.