diff --git a/README.md b/README.md index 55bb898..6952c66 100644 --- a/README.md +++ b/README.md @@ -58,10 +58,11 @@ multiple log files. * `path` - the path to the log file * `level` - the logging level for the backend +* `level_cmp` - `nil` (default): treat level as the _minimum_ logging level for the backend; `:exact` treat level as the _exact_ logging level for the backend * `format` - the logging format for the backend * `metadata` - the metadata to include * `metadata_filter` - metadata terms which must be present in order to log -* metadata_reject - metadata terms which must be present in order to do not log +* `metadata_reject` - metadata terms which must be present in order to do not log ### Examples diff --git a/lib/logger_file_backend.ex b/lib/logger_file_backend.ex index e3e65bd..0180282 100644 --- a/lib/logger_file_backend.ex +++ b/lib/logger_file_backend.ex @@ -31,10 +31,14 @@ defmodule LoggerFileBackend do def handle_event( {level, _gl, {Logger, msg, ts, md}}, - %{level: min_level, metadata_filter: metadata_filter, metadata_reject: metadata_reject} = + %{level: min_level, level_cmp: level_cmp, metadata_filter: metadata_filter, metadata_reject: metadata_reject} = state ) do - if (is_nil(min_level) or Logger.compare_levels(level, min_level) != :lt) and + level = case level do + :warn -> :warning + _ -> level + end + if level_matches?(level, min_level, level_cmp) and metadata_matches?(md, metadata_filter) and (is_nil(metadata_reject) or !metadata_matches?(md, metadata_reject)) do log_event(level, msg, ts, md, state) @@ -149,6 +153,10 @@ defmodule LoggerFileBackend do Logger.Formatter.format(format, level, msg, ts, take_metadata(md, keys)) end + defp level_matches?(_, nil, _), do: true + defp level_matches?(level, min_level, nil), do: Logger.compare_levels(level, min_level) != :lt + defp level_matches?(level, min_level, :exact), do: Logger.compare_levels(level, min_level) == :eq + @doc false @spec metadata_matches?(Keyword.t(), nil | Keyword.t()) :: true | false def metadata_matches?(_md, nil), do: true @@ -206,6 +214,7 @@ defmodule LoggerFileBackend do inode: nil, format: nil, level: nil, + level_cmp: nil, metadata: nil, metadata_filter: nil, metadata_reject: nil, @@ -221,6 +230,7 @@ defmodule LoggerFileBackend do Application.put_env(:logger, name, opts) level = Keyword.get(opts, :level) + level_cmp = Keyword.get(opts, :level_cmp) metadata = Keyword.get(opts, :metadata, []) format_opts = Keyword.get(opts, :format, @default_format) format = Logger.Formatter.compile(format_opts) @@ -235,6 +245,7 @@ defmodule LoggerFileBackend do path: path, format: format, level: level, + level_cmp: level_cmp, metadata: metadata, metadata_filter: metadata_filter, metadata_reject: metadata_reject,