add shell logger filter
This commit is contained in:
parent
63afb585d3
commit
293dcdfba4
|
@ -1,18 +1,59 @@
|
|||
defmodule Farmbot.Logger.Console do
|
||||
use GenStage
|
||||
@moduledoc false
|
||||
|
||||
use GenStage
|
||||
@default_log_verbosity 3
|
||||
|
||||
@doc "Filter by verbosity."
|
||||
def set_verbosity_level(verbosity_filter) do
|
||||
GenStage.call(__MODULE__, {:set_verbosity_level, verbosity_filter})
|
||||
end
|
||||
|
||||
@doc "Filter by level."
|
||||
def filter_level(level) when level in [:debug, :info, :busy, :success, :warn, :error] do
|
||||
GenStage.call(__MODULE__, {:filter_level, level})
|
||||
end
|
||||
|
||||
@doc "Remove a level filter."
|
||||
def remove_level_filter(level) when level in [:debug, :info, :busy, :success, :warn, :error] do
|
||||
GenStage.call(__MODULE__, {:remove_level_filter, level})
|
||||
end
|
||||
|
||||
@doc false
|
||||
def start_link do
|
||||
GenStage.start_link(__MODULE__, [], [])
|
||||
GenStage.start_link(__MODULE__, [], [name: __MODULE__])
|
||||
end
|
||||
|
||||
def init([]) do
|
||||
{:consumer, [], subscribe_to: [Farmbot.Logger]}
|
||||
{:consumer, %{verbosity: @default_log_verbosity, level_filters: []}, subscribe_to: [Farmbot.Logger]}
|
||||
end
|
||||
|
||||
def handle_events(events, _, state) do
|
||||
for event <- events do
|
||||
IO.inspect event
|
||||
def handle_events(events, _, %{verbosity: verbosity_filter, level_filters: filters} = state) do
|
||||
for log <- events do
|
||||
if log.verbosity <= verbosity_filter and log.level not in filters do
|
||||
IO.inspect log
|
||||
end
|
||||
end
|
||||
{:noreply, [], state}
|
||||
end
|
||||
|
||||
def handle_call({:set_verbosity_level, num}, _from, state) do
|
||||
{:reply, :ok, [], %{state | verbosity: num}}
|
||||
end
|
||||
|
||||
def handle_call({:filter_level, level}, _from, %{level_filters: filters} = state) do
|
||||
if level not in filters do
|
||||
{:reply, :ok, [], %{state | level_filters: [level | filters]}}
|
||||
else
|
||||
{:reply, :ok, [], state}
|
||||
end
|
||||
end
|
||||
|
||||
def handle_call({:filter_level, _}, _, state) do
|
||||
{:reply, :ok, [], state}
|
||||
end
|
||||
|
||||
def handle_call({:remove_level_filter, level}, _from, state) do
|
||||
{:reply, :ok, [], %{state | level_filters: List.delete(level, state.level_filters)}}
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue