diff --git a/lib/logger_json/formatter/metadata.ex b/lib/logger_json/formatter/metadata.ex index b34135a..39f0c58 100644 --- a/lib/logger_json/formatter/metadata.ex +++ b/lib/logger_json/formatter/metadata.ex @@ -66,6 +66,27 @@ defmodule LoggerJSON.Formatter.Metadata do end def take_metadata(meta, keys) when is_list(keys) do - Map.take(meta, keys) + Enum.reduce(keys, %{}, &compute_meta(&1, &2, meta)) + end + + defp compute_meta(:module, acc, meta) do + case meta do + %{mfa: {mod, _, _}} -> Map.put(acc, :module, inspect(mod)) + _ -> acc + end + end + + defp compute_meta(:function, acc, meta) do + case meta do + %{mfa: {_, fun, arity}} -> Map.put(acc, :function, "#{fun}/#{arity}") + _ -> acc + end + end + + defp compute_meta(key, acc, meta) do + case meta do + %{^key => value} -> Map.put(acc, key, value) + _ -> acc + end end end diff --git a/test/logger_json/formatter/metadata_test.exs b/test/logger_json/formatter/metadata_test.exs index 6b4ae06..041524c 100644 --- a/test/logger_json/formatter/metadata_test.exs +++ b/test/logger_json/formatter/metadata_test.exs @@ -114,5 +114,14 @@ defmodule LoggerJSON.Formatter.MetadataTest do assert take_metadata(meta, [:mfa]) == %{mfa: "mfa"} end + + test "supports special metadata keys :module and :function" do + meta = %{ + mfa: {Foo.Bar, :foo, 7} + } + + assert take_metadata(meta, [:module]) == %{module: "Foo.Bar"} + assert take_metadata(meta, [:function]) == %{function: "foo/7"} + end end end