diff --git a/lib/logger_json.ex b/lib/logger_json.ex index c86000e..f693616 100644 --- a/lib/logger_json.ex +++ b/lib/logger_json.ex @@ -221,7 +221,8 @@ defmodule LoggerJSON do defp configure_metadata([]), do: [] defp configure_metadata(:all), do: :all - defp configure_metadata(metadata) when is_list(metadata), do: Enum.reverse(metadata) + defp configure_metadata({:all_except, keys}), do: {:all_except, Enum.reverse(keys)} + defp configure_metadata(keys) when is_list(keys), do: Enum.reverse(keys) defp configure_merge(env, options), do: Keyword.merge(env, options, fn _key, _v1, v2 -> v2 end) @@ -298,6 +299,12 @@ defmodule LoggerJSON do # Drops keys that can not or should not be encoded to JSON def take_metadata(metadata, keys_or_all, ignored_keys \\ []) + def take_metadata(metadata, {:all_except, keys}, ignored_keys) do + metadata + |> Keyword.drop(ignored_keys ++ keys ++ @ignored_metadata_keys) + |> Enum.into(%{}) + end + def take_metadata(metadata, :all, ignored_keys) do metadata |> Keyword.drop(ignored_keys ++ @ignored_metadata_keys) diff --git a/mix.exs b/mix.exs index a60d79e..e656e17 100644 --- a/mix.exs +++ b/mix.exs @@ -2,7 +2,7 @@ defmodule LoggerJSON.Mixfile do use Mix.Project @source_url "https://github.com/Nebo15/logger_json" - @version "5.1.2" + @version "5.1.3" def project do [ diff --git a/test/unit/logger_json/formatters/google_cloud_logger_test.exs b/test/unit/logger_json/formatters/google_cloud_logger_test.exs index c5fd7c2..bed9af1 100644 --- a/test/unit/logger_json/formatters/google_cloud_logger_test.exs +++ b/test/unit/logger_json/formatters/google_cloud_logger_test.exs @@ -175,6 +175,21 @@ defmodule LoggerJSON.GoogleCloudLoggerTest do assert %{"dynamic_metadata" => 5} = log end + test "can be configured to :all_except" do + Logger.configure_backend(LoggerJSON, metadata: {:all_except, [:user_id]}) + + Logger.metadata(user_id: 11) + Logger.metadata(dynamic_metadata: 5) + + log = + fn -> Logger.debug("hello") end + |> capture_log() + |> Jason.decode!() + + refute Map.has_key?(log, "user_id") + assert Map.has_key?(log, "dynamic_metadata") + end + test "can be empty" do Logger.configure_backend(LoggerJSON, metadata: [])