Packages
membrane_core
0.3.1
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/core/element/log.ex
defmodule Membrane.Core.Element.Log do
@moduledoc false
alias Membrane.Core.Element.State
alias Membrane.Log
alias Membrane.Log.Logger
defmacro __using__(args) do
quote location: :keep do
use Membrane.Log, tags: :core, import: false
use Membrane.Log, unquote(args |> Keyword.put(:import, false))
unquote do
if args |> Keyword.get(:import, true) do
quote do: import(Membrane.Core.Element.Log)
end
end
end
end
defmacro debug(message, state, tags \\ []) do
quote do
unquote(bring_logger())
tags = unquote(__MODULE__).append_tags(unquote(tags), unquote(state))
Log.debug(unquote(__MODULE__).parse(unquote(message), unquote(state)), tags)
end
end
@doc false
defmacro info(message, state, tags \\ []) do
quote do
unquote(bring_logger())
tags = unquote(__MODULE__).append_tags(unquote(tags), unquote(state))
Log.info(unquote(__MODULE__).parse(unquote(message), unquote(state)), tags)
end
end
@doc false
defmacro warn(message, state, tags \\ []) do
quote do
unquote(bring_logger())
tags = unquote(__MODULE__).append_tags(unquote(tags), unquote(state))
Log.warn(unquote(__MODULE__).parse_warn(unquote(message), unquote(state)), tags)
end
end
defmacro warn_error(message, reason, state, tags \\ []) do
quote do
unquote(bring_logger())
tags = unquote(__MODULE__).append_tags(unquote(tags), unquote(state))
Log.warn_error(
unquote(__MODULE__).parse_warn(unquote(message), unquote(state)),
unquote(reason),
tags
)
unquote({{:error, reason}, state})
end
end
defmacro or_warn_error(v, message, tags \\ []) do
use Bunch
quote do
with {:ok, res} <- unquote(v) |> Bunch.stateful_try_with_status() do
res
else
{_error, {{:error, reason}, state}} ->
unquote(__MODULE__).warn_error(unquote(message), reason, state, unquote(tags))
end
end
end
@spec parse(Logger.message_t(), State.t()) :: Logger.message_t()
def parse(message, %State{name: name}) do
["Element #{inspect(name)}: ", message]
end
def parse_warn(message, %State{name: name} = state) do
["Element #{inspect(name)}: ", message, "\n", "state: #{inspect(state)}"]
end
@spec append_tags([Logger.tag_t()], State.t()) :: State.t()
def append_tags(tags, %State{name: name}) do
case name do
{name, _id} -> [name | tags]
_ -> name
end
end
@spec bring_logger() :: term
defp bring_logger do
quote do
use Membrane.Log, tags: :core, import: false
end
end
end