v0.2.0 (2026-08-12)
First release published to Hex. Earlier versions were installed from git.
Breaking changes
- Require Elixir 1.16 or later, up from 1.15.
- Require Req 0.7 or later, up from 0.5. Req 0.5 and 0.6 skipped the request steps when the retry or redirect step re-entered the pipeline, so the timer was never restarted and every attempt after the first reported a cumulative duration that included the retry delay.
- Renamed the
:log_leveloption to:req_logger_level. Req keeps every option in one flat namespace shared by all plugins and does not detect collisions when registering them, so two plugins claiming:log_levelwould silently share a value. Passing:log_levelnow raisesunknown option :log_level. - Reworked the default log levels to
:errorfor 5xx responses,:warningfor 4xx responses and:infofor everything else, replacing:errorfor anything 4xx and above and:warningfor 3xx. Req follows redirects by default, so a redirect it resolved on its own warned about entirely routine traffic, and a 404 is frequently the expected answer rather than a failure.
Added
:req_logger_levelaccepts aLogger.level/0atom in addition to a function, matching how Req's own:retry_log_leveland:redirect_log_levelwork.- Invalid
:req_logger_levelvalues raiseArgumentErrorwhen the plugin is attached, or — for a per-request override — before the request is sent. Previously anything that was not a 1-arity function was silently ignored and the default level was used instead.
Fixed
- Strip userinfo from logged URLs. A base URL carrying credentials logged them verbatim:
GET http://user:hunter2@localhost/secrets -> 200. Query strings and fragments were already stripped. - Omit the duration, rather than raising
KeyError, when an earlier request step short-circuits before the start-time step runs. A cache, a mock or a circuit breaker returning a canned response skips the timer, and the logger then replaced the caller's actual result with aKeyError.
v0.1.0 (2023-09-16)
Initial release.