Skip to content

Fix logger failing when connection is upgraded to websocket - #6741

Closed
SteffenDE wants to merge 1 commit into
mainfrom
sd-fix-wsupgrade-log
Closed

Fix logger failing when connection is upgraded to websocket#6741
SteffenDE wants to merge 1 commit into
mainfrom
sd-fix-wsupgrade-log

Conversation

@SteffenDE

Copy link
Copy Markdown
Member

Fixes

[error] Handler {Phoenix.Logger, [:phoenix, :endpoint, :stop]} has failed and has been detached. Class=:error
Reason=:function_clause
Stacktrace=[
  {Plug.Conn.Status, :code, [nil],
   [file: ~c"lib/plug/conn/status.ex", line: 118]},
  {Phoenix.Logger, :status_to_string, 1,
   [file: ~c"lib/phoenix/logger.ex", line: 293]},
  {Phoenix.Logger, :"-phoenix_endpoint_stop/4-fun-0-", 2,
   [file: ~c"lib/phoenix/logger.ex", line: 262]},
  {Logger, :__do_log__, 4, [file: ~c"lib/logger.ex", line: 1029]},
  {:telemetry, :do_execute, 4,
   [file: ~c"/home/steffen/dayzee/deps/telemetry/src/telemetry.erl", line: 202]},
  {Plug.Telemetry, :"-call/2-fun-0-", 4,
   [file: ~c"lib/plug/telemetry.ex", line: 76]},
  {Enum, :"-reduce/3-lists^foldl/2-0-", 3, [file: ~c"lib/enum.ex", line: 2520]},
  {Plug.Conn, :run_before_send, 2, [file: ~c"lib/plug/conn.ex", line: 1918]},
  {Plug.Conn, :upgrade_adapter, 3, [file: ~c"lib/plug/conn.ex", line: 1476]},
  {DayzeeWeb.WebsocketUpgrade, :call, 2,
   [file: ~c"lib/dayzee_web/websocketupgrade.ex", line: 13]},
  {Phoenix.Router, :__call__, 5, [file: ~c"lib/phoenix/router.ex", line: 416]},
  {DayzeeWeb.Endpoint, :plug_builder_call, 2,
   [file: ~c"lib/dayzee_web/endpoint.ex", line: 1]},
  {DayzeeWeb.Endpoint, :"call (overridable 3)", 2,
   [file: ~c"deps/plug/lib/plug/debugger.ex", line: 155]},
  {DayzeeWeb.Endpoint, :call, 2,
   [file: ~c"lib/dayzee_web/endpoint.ex", line: 1]},
  {...},
  ...
]

when using WebSockAdapter.upgrade. In that case status is nil.

@SteffenDE

Copy link
Copy Markdown
Member Author

Fixed upstream!

@SteffenDE SteffenDE closed this Jun 30, 2026
@SteffenDE
SteffenDE deleted the sd-fix-wsupgrade-log branch June 30, 2026 12:15
v0idpwn pushed a commit to supabase/supavisor that referenced this pull request Jul 23, 2026
…1125)

<!-- ccr-slack-attribution -->
_Requested by **Jefferson Venerando, Felipe Stival** · [Slack
thread](https://supabase.slack.com/archives/C04JR9DBNQL/p1784832508728499?thread_ts=1784832508.728499&cid=C04JR9DBNQL)_

### Before

After the Plug 1.20 bump (shipped in v2.9.9), a websocket upgrade on
`GET /v2` leaves `conn.status` nil. Plug 1.20.0 newly runs `before_send`
callbacks on `Plug.Conn.upgrade_adapter/3`, which fires Phoenix's
`[:phoenix, :endpoint, :stop]` telemetry handler while `conn.status` is
still `nil`. That handler calls `Plug.Conn.Status.code(nil)`, which
raises `:function_clause`. Erlang `:telemetry` then permanently detaches
the failing handler node-wide, so all per-request Phoenix logs stop
appearing in Logflare until the node restarts.

The offending route is `lib/supavisor_web/ws_proxy.ex`, which upgrades
via `Plug.Conn.upgrade_adapter/3` without setting a status.

### After

Bumping `plug` to 1.20.3 makes upgrades default `conn.status` to `101`
before running `before_send` (Plug
[#1320](elixir-plug/plug#1320)), so the
telemetry handler never sees `nil`, never raises, and request logging
keeps working. 1.20.3 also carries CVE fixes.

### How

Single-line `mix.lock` bump of `plug` from 1.20.1 to 1.20.3. `plug` is a
transitive dependency (via `phoenix`/`plug_cowboy`), so there is no
`mix.exs` change and no application code change.

Refs:
- Plug fix:
[elixir-plug/plug#1320](elixir-plug/plug#1320)
- Phoenix report:
[phoenixframework/phoenix#6741](phoenixframework/phoenix#6741)
(closed "Fixed upstream!")

---
_Generated by [Claude
Code](https://claude.ai/code/session_01DuxufDmqyTd3iswyfg5msD)_

Co-authored-by: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant