Skip to content

Commit

Permalink
add log filter
Browse files Browse the repository at this point in the history
  • Loading branch information
satoren committed Jan 22, 2025
1 parent 19c2fe3 commit f90732f
Show file tree
Hide file tree
Showing 2 changed files with 67 additions and 10 deletions.
29 changes: 19 additions & 10 deletions lib/logger_proxy.ex
Original file line number Diff line number Diff line change
Expand Up @@ -46,26 +46,35 @@ defmodule Mediasoup.LoggerProxy do
}
end

@type config :: {:max_level, :off | :error | :warn | :info | :debug}
@type config :: [
max_level: :off | :error | :warn | :info | :debug,
filter: (Record.t() -> boolean()) | nil
]

@spec start_link([config]) :: :ignore | {:error, any} | {:ok, pid}
def start_link(config \\ []) do
max_level = Keyword.get(config, :max_level, :error)
GenServer.start_link(Mediasoup.LoggerProxy, %{max_level: max_level}, name: __MODULE__)
filter = Keyword.get(config, :filter, nil)

GenServer.start_link(Mediasoup.LoggerProxy, %{max_level: max_level, filter: filter},
name: __MODULE__
)
end

def init(init_arg) do
Mediasoup.Nif.set_logger_proxy_process(self(), init_arg[:max_level])
{:ok, %{}}
{:ok, init_arg}
end

def handle_info(%Mediasoup.LoggerProxy.Record{} = msg, state) do
Logger.log(msg.level, msg.body, %{
line: msg.line,
file: msg.file,
mfa: msg.target,
module_path: msg.module_path
})
def handle_info(%Mediasoup.LoggerProxy.Record{} = msg, %{filter: filter} = state) do
if filter == nil || filter.(msg) do
Logger.log(msg.level, msg.body, %{
line: msg.line,
file: msg.file,
mfa: msg.target,
module_path: msg.module_path
})
end

{:noreply, state}
end
Expand Down
48 changes: 48 additions & 0 deletions test/logger_proxy_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -83,4 +83,52 @@ defmodule Mediasoup.LoggerProxyTest do
Process.sleep(10)
end) =~ "test"
end

describe "log filter" do
test "filter info only" do
LoggerProxy.start_link(max_level: :debug, filter: fn msg -> msg.level == :info end)

assert capture_log(fn ->
Mediasoup.Nif.debug_logger(:info, "test")
Process.sleep(10)
end) =~ "test"

refute capture_log(fn ->
Mediasoup.Nif.debug_logger(:debug, "test")
Process.sleep(10)
end) =~ "test"
end

test "filter can_consume error" do
pattern = ~r/can_consume\(\) \| Producer with id "(?<id>[^"]+)" not found/

filter_can_consume_error = fn msg ->
msg.level === :error && msg.target === "mediasoup::router" &&
Regex.match?(pattern, msg.body)
end

LoggerProxy.start_link(
max_level: :warn,
filter: filter_can_consume_error
)

alias Mediasoup.{Worker, Router}
{:ok, worker} = Worker.start_link()

{:ok, router} =
Worker.create_router(worker, %{
mediaCodecs: []
})

assert capture_log(fn ->
Router.can_consume?(router, "d117b485-7490-4146-812f-d3f744f0a8c7", %{
codecs: [],
headerExtensions: [],
fecMechanisms: []
})

Process.sleep(10)
end) =~ "can_consume() | Producer with id "
end
end
end

0 comments on commit f90732f

Please sign in to comment.