1defmodule Logger.Filter do
2  @moduledoc false
3
4  @doc """
5  Filter messages logged via `Logger` module when not logging OTP reports.
6  """
7  def filter_elixir_domain(%{meta: meta}, _extra) do
8    case meta do
9      %{domain: [:elixir | _]} -> :ignore
10      _ -> :stop
11    end
12  end
13
14  @doc """
15  Filter out logs if current process opted out of log reports.
16  """
17  def process_disabled(_log, _extra) do
18    if Logger.enabled?(self()) do
19      :ignore
20    else
21      :stop
22    end
23  end
24
25  @doc """
26  A filter that waits until Logger exits and then removes itself.
27  """
28  def silence_logger_exit(
29        %{
30          msg:
31            {:report,
32             %{
33               label: {:application_controller, :exit},
34               report: [application: :logger, exited: :stopped] ++ _
35             }}
36        },
37        _extra
38      ) do
39    :stop
40  end
41
42  def silence_logger_exit(_message, _extra) do
43    :ignore
44  end
45end
46