Skip to content

Commit 14a3d0c

Browse files
authored
Convert charlists in metadata to strings (#646)
Closes #645.
1 parent b80dcd8 commit 14a3d0c

File tree

3 files changed

+34
-5
lines changed

3 files changed

+34
-5
lines changed

lib/sentry/logger_utils.ex

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,29 @@ defmodule Sentry.LoggerUtils do
5151
nil
5252
end
5353

54-
defp logger_metadata(meta, :all), do: Map.new(meta)
55-
defp logger_metadata(meta, allowed_meta), do: meta |> Map.new() |> Map.take(allowed_meta)
54+
defp logger_metadata(meta, allowed_meta) do
55+
meta = Map.new(meta)
56+
57+
# Filter allowed meta.
58+
meta =
59+
case allowed_meta do
60+
:all -> meta
61+
allowed_meta -> Map.take(meta, allowed_meta)
62+
end
63+
64+
# Potentially convert to iodata.
65+
:maps.map(fn _key, val -> attempt_to_convert_iodata(val) end, meta)
66+
end
67+
68+
defp attempt_to_convert_iodata(list) when is_list(list) do
69+
IO.chardata_to_string(list)
70+
rescue
71+
_exception -> list
72+
else
73+
str -> if String.printable?(str), do: str, else: list
74+
end
75+
76+
defp attempt_to_convert_iodata(other) do
77+
other
78+
end
5679
end

test/logger_backend_test.exs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,9 @@ defmodule Sentry.LoggerBackendTest do
150150
end
151151

152152
test "includes Logger metadata for keys configured to be included" do
153-
Logger.configure_backend(Sentry.LoggerBackend, metadata: [:string, :number, :map, :list])
153+
Logger.configure_backend(Sentry.LoggerBackend,
154+
metadata: [:string, :number, :map, :list, :chardata]
155+
)
154156

155157
ref = register_before_send()
156158

@@ -161,6 +163,7 @@ defmodule Sentry.LoggerBackendTest do
161163
Logger.metadata(number: 43)
162164
Logger.metadata(map: %{a: "b"})
163165
Logger.metadata(list: [1, 2, 3])
166+
Logger.metadata(chardata: ["π's unicode is", ?\s, []])
164167
{:noreply, state}
165168
end)
166169

@@ -171,6 +174,7 @@ defmodule Sentry.LoggerBackendTest do
171174
assert event.extra.logger_metadata.map == %{a: "b"}
172175
assert event.extra.logger_metadata.list == [1, 2, 3]
173176
assert event.extra.logger_metadata.number == 43
177+
assert event.extra.logger_metadata.chardata == "π's unicode is π"
174178
end
175179

176180
test "does not include Logger metadata when disabled" do

test/sentry/logger_handler_test.exs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -172,15 +172,16 @@ defmodule Sentry.LoggerHandlerTest do
172172
end
173173
end
174174

175-
@tag handler_config: %{metadata: [:string, :number, :map, :list]}
175+
@tag handler_config: %{metadata: [:string, :number, :map, :list, :chardata]}
176176
test "includes Logger metadata for keys configured to be included",
177177
%{sender_ref: ref, test_genserver: test_genserver} do
178178
run_and_catch_exit(test_genserver, fn ->
179179
Logger.metadata(
180180
string: "string",
181181
number: 43,
182182
map: %{a: "b"},
183-
list: [1, 2, 3]
183+
list: [1, 2, 3],
184+
chardata: ["π's unicode is", ?\s, []]
184185
)
185186

186187
invalid_function()
@@ -191,6 +192,7 @@ defmodule Sentry.LoggerHandlerTest do
191192
assert event.extra.logger_metadata.map == %{a: "b"}
192193
assert event.extra.logger_metadata.list == [1, 2, 3]
193194
assert event.extra.logger_metadata.number == 43
195+
assert event.extra.logger_metadata.chardata == "π's unicode is π"
194196
end
195197

196198
@tag handler_config: %{metadata: []}

0 commit comments

Comments
 (0)