Skip to content

Commit bcdcc04

Browse files
authored
Accept structs as structured logs in Sentry.LoggerHandler (#780)
1 parent 116140d commit bcdcc04

File tree

2 files changed

+29
-2
lines changed

2 files changed

+29
-2
lines changed

lib/sentry/logger_handler.ex

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -338,7 +338,12 @@ defmodule Sentry.LoggerHandler do
338338
log_from_crash_reason(log_event.meta[:crash_reason], unicode_chardata, sentry_opts, config)
339339
end
340340

341-
# "report" here is of type logger:report/0, which is a map or keyword list.
341+
# "report" here is of type logger:report/0, which is a struct, map or keyword list.
342+
defp log_unfiltered(%{msg: {:report, report}}, sentry_opts, %__MODULE__{} = config)
343+
when is_struct(report) do
344+
capture(:message, inspect(report), sentry_opts, config)
345+
end
346+
342347
defp log_unfiltered(%{msg: {:report, report}}, sentry_opts, %__MODULE__{} = config) do
343348
case Map.new(report) do
344349
%{reason: {exception, stacktrace}}

test/sentry/logger_handler_test.exs

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ defmodule Sentry.LoggerHandlerTest do
136136
end
137137

138138
@tag handler_config: %{capture_log_messages: true}
139-
test "support structured logs", %{sender_ref: ref} do
139+
test "support structured logs keyword", %{sender_ref: ref} do
140140
Logger.error(foo: "bar")
141141

142142
assert_receive {^ref, event}
@@ -145,6 +145,28 @@ defmodule Sentry.LoggerHandlerTest do
145145
refute_received {^ref, _event}, 100
146146
end
147147

148+
test "support structured logs map", %{sender_ref: ref} do
149+
Logger.error(%{foo: "bar"})
150+
151+
assert_receive {^ref, event}
152+
assert event.message.formatted == "%{foo: \"bar\"}"
153+
154+
refute_received {^ref, _event}, 100
155+
end
156+
157+
defmodule Foo do
158+
defstruct [:bar]
159+
end
160+
161+
test "support structured logs struct", %{sender_ref: ref} do
162+
Logger.error(%Foo{})
163+
164+
assert_receive {^ref, event}
165+
assert event.message.formatted == "%Sentry.LoggerHandlerTest.Foo{bar: nil}"
166+
167+
refute_received {^ref, _event}, 100
168+
end
169+
148170
@tag handler_config: %{capture_log_messages: true, level: :warning}
149171
test "respects the configured :level", %{sender_ref: ref} do
150172
Logger.log(:warning, "Testing warning")

0 commit comments

Comments
 (0)