Packages
membrane_core
0.2.0
1.3.4
1.3.3
1.3.2
1.3.1
1.3.0
1.2.7
1.2.6
1.2.5
retired
1.2.4
1.2.3
1.2.2
1.2.1
1.2.0
1.2.0-rc1
1.1.2
1.1.1
1.1.0
1.1.0-rc1
1.1.0-rc0
1.0.1
1.0.0
1.0.0-rc1
1.0.0-rc0
0.12.9
0.12.8
0.12.7
0.12.6
0.12.5
0.12.4
0.12.3
0.12.2
0.12.1
0.12.0
retired
0.11.5
0.11.4
0.11.3
0.11.2
0.11.1
0.11.0
0.10.2
0.10.1
0.10.0
0.9.0
0.8.2
0.8.1
0.8.0
0.7.0
0.6.1
0.6.0
0.5.3
0.5.2
0.5.1
0.5.0
0.4.3
0.4.2
0.4.1
0.4.0
0.3.2
0.3.1
0.3.0
0.2.2
0.2.1
0.2.0
0.1.1
0.1.0
Membrane Multimedia Framework (Core)
Current section
Files
Jump to
Current section
Files
lib/membrane/log.ex
defmodule Membrane.Log do
@moduledoc """
Mixin for logging using simple functions such as info/1, debug/1 in other
modules.
"""
use Bunch
alias Membrane.Log.Router
defmacro __using__(args) do
passed_tags = args |> Keyword.get(:tags, []) |> Bunch.listify()
previous_tags = Module.get_attribute(__CALLER__.module, :logger_default_tags) || []
default_tags = (passed_tags ++ previous_tags) |> Enum.dedup()
Module.put_attribute(__CALLER__.module, :logger_default_tags, default_tags)
if args |> Keyword.get(:import, true) do
quote location: :keep do
import Membrane.Log
end
end
end
defmacro debug(message, tags \\ []) do
do_log(:debug, message, tags)
end
defmacro info(message, tags \\ []) do
do_log(:info, message, tags)
end
defmacro warn(message, tags \\ []) do
do_log(:warn, message, tags)
end
defmacro warn_error(message, reason, tags \\ []) do
message =
quote do
use Bunch
[
"Encountered an error.\n",
"Reason: #{inspect(unquote(reason))}\n",
unquote(message),
"\n",
"""
Stacktrace:
#{Bunch.stacktrace()}
"""
]
end
quote location: :keep do
unquote(do_log(:warn, message, tags))
unquote({:error, reason})
end
end
defmacro or_warn_error(v, message, tags \\ []) do
quote location: :keep do
with {:ok, value} <- unquote(v) do
{:ok, value}
else
{:error, reason} ->
Membrane.Log.warn_error(unquote(message), reason, unquote(tags))
end
end
end
defmacro log(level, message, tags \\ []) do
do_log(level, message, tags)
end
defp do_log(level, message, tags) do
config = Application.get_env(:membrane_core, Membrane.Logger, [])
router_level = config |> Keyword.get(:level, :debug)
router_level_val = router_level |> Router.level_to_val()
send_code =
quote do
alias Membrane.Log.Router
use Bunch
Router.send_log(
unquote(level),
unquote(message),
Membrane.Time.pretty_now(),
(unquote(tags) |> Bunch.listify()) ++ @logger_default_tags
)
end
cond do
not is_atom(level) ->
quote location: :keep do
alias Membrane.Log.Router
if Router.level_to_val(level) >= unquote(router_level_val) do
unquote(send_code)
end
:ok
end
level |> Router.level_to_val() >= router_level_val ->
quote location: :keep do
unquote(send_code)
:ok
end
true ->
quote location: :keep, bind_quoted: [message: message, tags: tags] do
end
end
end
end