diff --git a/lib/logger_json/formatter/metadata.ex b/lib/logger_json/formatter/metadata.ex index 2345ea3..b34135a 100644 --- a/lib/logger_json/formatter/metadata.ex +++ b/lib/logger_json/formatter/metadata.ex @@ -1,7 +1,7 @@ defmodule LoggerJSON.Formatter.Metadata do @moduledoc false - @ignored_metadata_keys ~w[ansi_color initial_call crash_reason pid gl mfa report_cb time]a + @ignored_metadata_keys ~w[ansi_color initial_call crash_reason pid gl report_cb time]a @doc """ Takes current metadata option value and updates it to exclude the given keys. diff --git a/lib/logger_json/formatter/redactor_encoder.ex b/lib/logger_json/formatter/redactor_encoder.ex index b84aabd..d6864ab 100644 --- a/lib/logger_json/formatter/redactor_encoder.ex +++ b/lib/logger_json/formatter/redactor_encoder.ex @@ -64,6 +64,11 @@ defmodule LoggerJSON.Formatter.RedactorEncoder do def encode(list, redactors) when is_list(list), do: for(el <- list, do: encode(el, redactors)) def encode(data, _redactors), do: inspect(data, pretty: true, width: 80) + defp encode_key_value({:mfa, {_module, _function, _arity} = mfa}, redactors) do + value = format_mfa(mfa) + encode_key_value({:mfa, value}, redactors) + end + defp encode_key_value({key, value}, redactors) do key = encode_key(key) {key, encode(redact(key, value, redactors), redactors)} @@ -73,6 +78,8 @@ defmodule LoggerJSON.Formatter.RedactorEncoder do defp encode_key(key) when is_atom(key) or is_number(key), do: key defp encode_key(key), do: inspect(key) + defp format_mfa({module, function, arity}), do: "#{module}.#{function}/#{arity}" + defp encode_binary(data) when is_binary(data) do if String.valid?(data) && String.printable?(data) do data diff --git a/lib/logger_json/formatters/basic.ex b/lib/logger_json/formatters/basic.ex index f14faf7..bccb672 100644 --- a/lib/logger_json/formatters/basic.ex +++ b/lib/logger_json/formatters/basic.ex @@ -19,8 +19,7 @@ defmodule LoggerJSON.Formatters.Basic do @behaviour LoggerJSON.Formatter - @processed_metadata_keys ~w[file line mfa - otel_span_id span_id + @processed_metadata_keys ~w[otel_span_id span_id otel_trace_id trace_id conn]a diff --git a/test/logger_json/formatter/metadata_test.exs b/test/logger_json/formatter/metadata_test.exs index 1ee3576..6b4ae06 100644 --- a/test/logger_json/formatter/metadata_test.exs +++ b/test/logger_json/formatter/metadata_test.exs @@ -99,7 +99,6 @@ defmodule LoggerJSON.Formatter.MetadataTest do crash_reason: "crash_reason", pid: "pid", gl: "gl", - mfa: "mfa", report_cb: "report_cb", time: "time" } diff --git a/test/logger_json/formatters/basic_test.exs b/test/logger_json/formatters/basic_test.exs index ffc2243..2e1ee4a 100644 --- a/test/logger_json/formatters/basic_test.exs +++ b/test/logger_json/formatters/basic_test.exs @@ -114,6 +114,20 @@ defmodule LoggerJSON.Formatters.BasicTest do assert log["trace"] == "294740ce41cc9f202dedb563db123532" end + test "logs file, line and mfa as metadata" do + metadata = + capture_log(fn -> + Logger.debug("Hello") + end) + |> decode_or_print_error() + |> Map.get("metadata") + + assert metadata |> Map.get("file") |> to_string() =~ "logger_json/formatters/basic_test.exs" + assert metadata |> Map.get("line") |> is_integer() + + assert metadata["mfa"] === "Elixir.LoggerJSON.Formatters.BasicTest.test logs file, line and mfa as metadata/1" + end + test "logs metadata" do Logger.metadata( date: Date.utc_today(),