Skip to content

Commit ef18c27

Browse files
authored
fix: RealtimeChannel.Logging when a non binary message is logged (#1450)
1 parent ea01fa0 commit ef18c27

File tree

4 files changed

+58
-6
lines changed

4 files changed

+58
-6
lines changed

lib/realtime_web/channels/realtime_channel/logging.ex

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ defmodule RealtimeWeb.RealtimeChannel.Logging do
1919
def maybe_log(%{assigns: %{log_level: log_level}}, level, code, msg, metadata \\ []) do
2020
metadata = if metadata == [], do: Logger.metadata()
2121

22+
msg = stringify!(msg)
23+
2224
if Logger.compare_levels(log_level, level) != :gt do
2325
Logger.log(level, "#{code}: #{msg}", metadata)
2426
end
@@ -86,11 +88,7 @@ defmodule RealtimeWeb.RealtimeChannel.Logging do
8688
msg
8789
) do
8890
if Logger.compare_levels(log_level, :info) == :eq do
89-
msg =
90-
case msg do
91-
msg when is_binary(msg) -> msg
92-
_ -> inspect(msg, pretty: true)
93-
end
91+
msg = stringify!(msg)
9492

9593
msg = "Received message on " <> channel_name <> " with payload: " <> msg
9694
Logger.log(log_level, msg)
@@ -99,6 +97,13 @@ defmodule RealtimeWeb.RealtimeChannel.Logging do
9997
socket
10098
end
10199

100+
defp stringify!(msg) do
101+
case msg do
102+
msg when is_binary(msg) -> msg
103+
_ -> inspect(msg, pretty: true)
104+
end
105+
end
106+
102107
@doc """
103108
List of errors that are system triggered and not user driven
104109
"""

mix.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ defmodule Realtime.MixProject do
44
def project do
55
[
66
app: :realtime,
7-
version: "2.40.1",
7+
version: "2.40.2",
88
elixir: "~> 1.17.3",
99
elixirc_paths: elixirc_paths(Mix.env()),
1010
start_permanent: Mix.env() == :prod,

test/integration/rt_channel_test.exs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,41 @@ defmodule Realtime.Integration.RtChannelTest do
112112
:ok
113113
end
114114

115+
test "error subscribing", %{tenant: tenant} do
116+
{:ok, conn} = Database.connect(tenant, "realtime_test")
117+
118+
# Let's drop the publication to cause an error
119+
Database.transaction(conn, fn db_conn ->
120+
Postgrex.query!(db_conn, "drop publication if exists supabase_realtime_test")
121+
end)
122+
123+
{socket, _} = get_connection(tenant)
124+
topic = "realtime:any"
125+
config = %{postgres_changes: [%{event: "INSERT", schema: "public"}]}
126+
127+
log =
128+
capture_log(fn ->
129+
WebsocketClient.join(socket, topic, %{config: config})
130+
131+
assert_receive %Message{
132+
event: "system",
133+
payload: %{
134+
"channel" => "any",
135+
"extension" => "postgres_changes",
136+
"message" =>
137+
"{:error, \"Unable to subscribe to changes with given parameters. Please check Realtime is enabled for the given connect parameters: [event: INSERT, schema: public]\"}",
138+
"status" => "error"
139+
},
140+
ref: nil,
141+
topic: ^topic
142+
},
143+
8000
144+
end)
145+
146+
assert log =~ "RealtimeDisabledForConfiguration"
147+
assert log =~ "Unable to subscribe to changes with given parameters"
148+
end
149+
115150
test "handle insert", %{tenant: tenant} do
116151
{socket, _} = get_connection(tenant)
117152
topic = "realtime:any"

test/realtime_web/channels/realtime_channel/logging_test.exs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,18 @@ defmodule RealtimeWeb.RealtimeChannel.LoggingTest do
8585
end) =~ "TestError: test error"
8686
end
8787

88+
test "logs messages when not binary message" do
89+
socket = %{assigns: %{log_level: :info}}
90+
91+
assert capture_log(fn ->
92+
Logging.maybe_log(socket, :info, "TestCode", {:error, "Error message"})
93+
end) =~ "TestCode: {:error, \"Error message\"}"
94+
95+
assert capture_log(fn ->
96+
Logging.maybe_log(socket, :error, "TestError", "test error")
97+
end) =~ "TestError: test error"
98+
end
99+
88100
test "does not log messages when log level is higher than the configured level" do
89101
socket = %{assigns: %{log_level: :error}}
90102

0 commit comments

Comments
 (0)