bumptech/glide · error · IllegalArgumentException

Log level must be one of Log.VERBOSE, Log.DEBUG, Log.INFO…

Error message

Log level must be one of Log.VERBOSE, Log.DEBUG, Log.INFO, Log.WARN, or Log.ERROR

What it means

Thrown by GlideBuilder.setLogLevel() when the supplied log level is outside the inclusive range [Log.VERBOSE, Log.ERROR]. Glide only accepts Android's standard log-level constants so that logging behavior is well-defined.

Solutions

  1. Pass one of the explicit constants: Log.VERBOSE, Log.DEBUG, Log.INFO, Log.WARN, or Log.ERROR.
  2. Validate any externally-sourced log level against the allowed range before calling setLogLevel.
  3. Default to Log.WARN when the value is unknown instead of forwarding an invalid one.
  4. Centralize log-level configuration behind a helper that constrains inputs.

Example fix

// before
Glide.init(this, GlideBuilder().setLogLevel(0)) // 0 is VERBOSE, but a bad source may pass -5

// after
val safeLevel = rawLevel.coerceIn(Log.VERBOSE, Log.ERROR)
Glide.init(this, GlideBuilder().setLogLevel(safeLevel))
Defensive patterns

Strategy: validation

Validate before calling

// Clamp externally sourced levels to the valid range before use.
fun safeLogLevel(raw: Int): Int = raw.coerceIn(Log.VERBOSE, Log.ERROR)

Glide.init(this, GlideBuilder().setLogLevel(safeLogLevel(configLevel)))

Prevention

When it happens

Trigger: setLogLevel(logLevel) is called with logLevel < Log.VERBOSE or logLevel > Log.ERROR.

Common situations: Passing a made-up integer for the log level; reading a level from a remote-config/JSON value without validation; using an Android Log constant from a different API (e.g. a priority value); copy-paste of the wrong constant.

Related errors


AI-assisted analysis of bumptech/glide@eb14a895d8 (2026-08-14). Data as JSON: /api/errors/bece742cce4c8ce0. Report an issue: GitHub.

Appendix: source

Thrown at library/src/main/java/com/bumptech/glide/GlideBuilder.java:359

   * exceptional cases will be logged.
   *
   * <p>All logs will be logged using the 'Glide' tag.
   *
   * <p>Many other debugging logs are available in individual classes. The log level supplied here
   * only controls a small set of informative and well formatted logs. Users wishing to debug
   * certain aspects of the library can look for individual <code>TAG</code> variables at the tops
   * of classes and use <code>adb shell setprop log.tag.TAG</code> to enable or disable any relevant
   * tags.
   *
   * @param logLevel The log level to use from {@link Log}.
   * @return This builder.
   */
  // Public API.
  @SuppressWarnings("unused")
  @NonNull
  public GlideBuilder setLogLevel(int logLevel) {
    if (logLevel < Log.VERBOSE || logLevel > Log.ERROR) {
      throw new IllegalArgumentException(
          "Log level must be one of Log.VERBOSE, Log.DEBUG," + " Log.INFO, Log.WARN, or Log.ERROR");
    }
    this.logLevel = logLevel;
    return this;
  }

  /**
   * If set to {@code true}, allows Glide to re-capture resources that are loaded into {@link
   * com.bumptech.glide.request.target.Target}s which are subsequently de-referenced and garbage
   * collected without being cleared.
   *
   * <p>Defaults to {@code false}.
   *
   * <p>Glide's resource re-use system is permissive, which means that's acceptable for callers to
   * load resources into {@link com.bumptech.glide.request.target.Target}s and then never clear the
   * {@link com.bumptech.glide.request.target.Target}. To do so, Glide uses {@link
   * java.lang.ref.WeakReference}s to track resources that belong to {@link
   * com.bumptech.glide.request.target.Target}s that haven't yet been cleared. Setting this method

View on GitHub (pinned to eb14a895d8)