Infinite Uploads includes several optional debug defines that write detailed diagnostic logs about what the plugin is doing behind the scenes. They're meant for troubleshooting a specific problem, such as a failing connection, a slow sync, or another plugin making excessive cloud storage requests, and answering our support team's questions with real data instead of guesswork.

These are developer and support tools. Turn them on only while you're chasing a problem, then turn them back off, since the more verbose options add overhead to every request.

Before You Start: Where the Logs Go

All of these defines write to PHP's error log using error_log(). They don't create a log file on their own, so you first need somewhere for that output to land.

The simplest option is WordPress' own debug log. Add these to wp-config.php above the /* That's all, stop editing! Happy publishing. */ line:

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );    // writes to wp-content/debug.log
define( 'WP_DEBUG_DISPLAY', false ); // keep errors out of the page output

With those in place, everything below is written to wp-content/debug.log. If wp-content isn't writable, or your host pins the log location, the entries will instead go to your server's PHP error log, which you can usually view from your hosting control panel.

Note: WP_DEBUG_LOG only redirects the log to wp-content/debug.log when WP_DEBUG is also true. Setting it on its own won't produce the file.

Cloud API Logging

INFINITE_UPLOADS_API_DEBUG

Logs every call the plugin makes to the Infinite Uploads cloud API, along with each step of a sync. This is the first define to reach for when a site won't connect, a sync stalls, or storage and bandwidth numbers look wrong.

define( 'INFINITE_UPLOADS_API_DEBUG', true );

Sample output:

[INFINITE_UPLOADS API call] 3.2.5 | GET: https://api.infiniteuploads.com/v1/site (200)[INFINITE_UPLOADS Sync Debug] 3.2.5 Fetch S3 files from directory to download >> Step 1

INFINITE_UPLOADS_API_DEBUG_ALL

Extends INFINITE_UPLOADS_API_DEBUG by adding the full request options and the complete response headers and body to each API log line. Use it when an API call is returning something unexpected and you need to see the raw response, not just the status code.

define( 'INFINITE_UPLOADS_API_DEBUG', true );
define( 'INFINITE_UPLOADS_API_DEBUG_ALL', true );

This is very verbose and will log full API responses. Enable it only briefly, and disable it as soon as you've captured what you need.

Cloud Storage (Stream Wrapper) Logging

Infinite Uploads serves your uploads through an iu:// stream wrapper, so any file operation another plugin performs on the uploads folder becomes a cloud storage request. These defines make those requests visible.

INFINITE_UPLOADS_SW_DEBUG

Logs every cloud storage operation the stream wrapper performs (listing a directory, checking whether a file exists, reading an object, and so on). At the end of each request it also writes a summary of the total number of calls and a breakdown of which plugin triggered them.

This is the define to use when a site is slow or hanging and you suspect a plugin is making too many cloud storage requests.

define( 'INFINITE_UPLOADS_SW_DEBUG', true );

Sample output:

[INFINITE_UPLOADS Stream Debug] ListObjects 2025/06/
[INFINITE_UPLOADS Stream Debug] doesObjectExist 2025/06/photo.jpg
[INFINITE_UPLOADS Stream Debug] Stream wrapper API calls in 2.13s: {"total":47,"commands":{"ListObjects":12,"HeadObject":35}}
[INFINITE_UPLOADS Stream Debug] Stream wrapper API calls by plugin: {"example-plugin":{"total":40,"commands":{"HeadObject":35,"ListObjects":5}}}

In the example above, example-plugin is responsible for 40 of the 47 cloud calls in a single page load, which points straight at the source of the slowdown.

INFINITE_UPLOADS_SW_DEBUG_BACKTRACE

Adds a full stack trace to each stream wrapper log line, so you can see exactly which code made the call. Use it together with INFINITE_UPLOADS_SW_DEBUG when the per-plugin summary tells you which plugin is responsible but you need to know where in that plugin the calls originate.

define( 'INFINITE_UPLOADS_SW_DEBUG', true );
define( 'INFINITE_UPLOADS_SW_DEBUG_BACKTRACE', true );

This define has no effect on its own; INFINITE_UPLOADS_SW_DEBUG must also be enabled. It's the most verbose option available, so use it for short, targeted reproductions only.

INFINITE_UPLOADS_SW_DEBUG_CACHE

Logs the stream wrapper's internal object cache activity (hits, misses, and writes). This is a niche define, useful when investigating why the same file appears to be looked up in the cloud repeatedly.

define( 'INFINITE_UPLOADS_SW_DEBUG_CACHE', true );

Sample output:

[INFINITE_UPLOADS Stream Cache] HIT 2025/06/photo.jpg
[INFINITE_UPLOADS Stream Cache] MISS 2025/06/banner.png

Reading the Log

All Infinite Uploads entries are prefixed with INFINITE_UPLOADS, so you can filter the log for just our output:

tail -f wp-content/debug.log | grep INFINITE_UPLOADS

If you don't have command-line access, open wp-content/debug.log in your hosting file manager, or use a log viewer plugin that displays it inside wp-admin.

When to Use Each Define

  • Connection, sync, or billing/usage problems → INFINITE_UPLOADS_API_DEBUG
  • An API response looks wrong and you need the raw data → add INFINITE_UPLOADS_API_DEBUG_ALL
  • The site is slow or hanging and a plugin may be over-using cloud storage → INFINITE_UPLOADS_SW_DEBUG
  • You know which plugin, but need the exact code path → add INFINITE_UPLOADS_SW_DEBUG_BACKTRACE
  • Investigating repeated lookups of the same file → INFINITE_UPLOADS_SW_DEBUG_CACHE

Best Practices

  • Enable only the define you need for the problem in front of you. The API and stream wrapper logs answer different questions.
  • These defines are safe to leave on briefly, but the stream wrapper options (especially with backtraces) add overhead to every request. Remove them once you've captured what you need.
  • Reproduce the issue once with logging on, then read the log, rather than leaving logging running indefinitely.
  • When sending a log to our support team, the prefixes make it easy to copy just the relevant INFINITE_UPLOADS lines.