Skip to content

Commit 4c10b43

Browse files
committed
Do not crash on invalid metadata in deprecated backends, closes #14995
1 parent 08b559f commit 4c10b43

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
@@ -116,6 +116,12 @@ defmodule Logger.Backends.HandlerTest do
116116
Logger.Backends.Internal.configure(Logger.Backends.Console, metadata: [])
117117
end
118118

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

0 commit comments

Comments
 (0)