Skip to content

Commit 97407cd

Browse files
committed
Do not crash on invalid metadata in deprecated backends, closes #14995
1 parent 579fc97 commit 97407cd

File tree

2 files changed

+13
-1
lines changed

2 files changed

+13
-1
lines changed

lib/logger/lib/logger/backends/handler.ex

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,13 @@ defmodule Logger.Backends.Handler do
4747
%{truncate: truncate, utc_log: utc_log?} = config
4848
level = erlang_level_to_elixir_level(erl_level)
4949
message = Logger.Formatter.format_event(event, truncate)
50-
timestamp = Map.get_lazy(metadata, :time, fn -> :os.system_time(:microsecond) end)
50+
51+
timestamp =
52+
case metadata do
53+
%{time: time} when is_integer(time) and time >= 0 -> time
54+
_ -> :os.system_time(:microsecond)
55+
end
56+
5157
date_time_ms = Logger.Formatter.system_time_to_date_time_ms(timestamp, utc_log?)
5258
metadata = [erl_level: erl_level] ++ erlang_metadata_to_elixir_metadata(metadata)
5359
event = {level, gl, {Logger, message, date_time_ms, metadata}}

lib/logger/test/logger/backends/handler_test.exs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,12 @@ defmodule Logger.Backends.HandlerTest do
113113
Logger.configure_backend(Logger.Backends.Console, metadata: [])
114114
end
115115

116+
test "ignores invalid Erlang metadata" do
117+
assert capture_log(fn -> :logger.info("ok", %{time: "bad"}) end) =~ "ok"
118+
after
119+
Logger.Backends.Internal.configure(Logger.Backends.Console, metadata: [])
120+
end
121+
116122
test "uses reporting callback with Elixir inspection" do
117123
assert capture_log(fn ->
118124
callback = fn %{hello: :world} -> {"~p~n", [:formatted]} end

0 commit comments

Comments
 (0)