From a8cbed445af343a118f504884892885a21a71674 Mon Sep 17 00:00:00 2001 From: Joshua Bouvier Date: Tue, 12 Mar 2024 09:32:01 +0000 Subject: [PATCH 1/3] add minimum log level to send to client --- lib/phoenix_live_reload/channel.ex | 21 +++++++++++++++------ test/channel_test.exs | 29 +++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 6 deletions(-) diff --git a/lib/phoenix_live_reload/channel.ex b/lib/phoenix_live_reload/channel.ex index f77efe6..839d089 100644 --- a/lib/phoenix_live_reload/channel.ex +++ b/lib/phoenix_live_reload/channel.ex @@ -64,12 +64,14 @@ defmodule Phoenix.LiveReloader.Channel do end def handle_info({@logs, %{level: level, msg: msg, file: file, line: line}}, socket) do - push(socket, "log", %{ - level: to_string(level), - msg: msg, - file: file, - line: line - }) + if is_log_min_log_level?(socket, level) do + push(socket, "log", %{ + level: to_string(level), + msg: msg, + file: file, + line: line + }) + end {:noreply, socket} end @@ -122,6 +124,13 @@ defmodule Phoenix.LiveReloader.Channel do socket.endpoint.config(:live_reload)[:web_console_logger] == true end + defp is_log_min_log_level?(socket, log_level) do + socket.endpoint.config(:live_reload)[:web_console_logger_min_log_level] |> case do + nil -> true + level -> Logger.compare_levels(log_level, level) != :lt + end + end + defp join_info do if url = System.get_env("PLUG_EDITOR") do %{editor_url: url} diff --git a/test/channel_test.exs b/test/channel_test.exs index e123bf2..8d4d4b9 100644 --- a/test/channel_test.exs +++ b/test/channel_test.exs @@ -152,4 +152,33 @@ defmodule Phoenix.LiveReloader.ChannelTest do assert info == %{editor_url: "vscode://file/__FILE__:__LINE__"} end + + test "send valid logs with a minimum log level" do + System.delete_env("PLUG_EDITOR") + + update_live_reload_env(@endpoint, fn conf -> + Keyword.merge(conf, web_console_logger: true, web_console_logger_min_log_level: :error) + end) + + {:ok, info, _socket} = + LiveReloader.Socket |> socket() |> subscribe_and_join(Channel, "phoenix:live_reload", %{}) + + assert info == %{} + Logger.info("hello") + + refute_receive _ + + update_live_reload_env(@endpoint, fn conf -> + Keyword.drop(conf, [:web_console_logger_min_log_level]) + end) + + {:ok, info, _socket} = + LiveReloader.Socket |> socket() |> subscribe_and_join(Channel, "phoenix:live_reload", %{}) + + assert info == %{} + + Logger.info("hello again") + assert_receive %Phoenix.Socket.Message{event: "log", payload: %{msg: msg, level: "info"}} + assert msg =~ "hello again" + end end From b12309aab5f4044ac2c8d8895af25261e73ceee3 Mon Sep 17 00:00:00 2001 From: Joshua Bouvier Date: Tue, 12 Mar 2024 10:58:31 +0000 Subject: [PATCH 2/3] move log comparison to js --- lib/phoenix_live_reload/channel.ex | 21 ++++++--------------- priv/static/phoenix_live_reload.js | 20 +++++++++++++++++++- test/channel_test.exs | 29 ----------------------------- 3 files changed, 25 insertions(+), 45 deletions(-) diff --git a/lib/phoenix_live_reload/channel.ex b/lib/phoenix_live_reload/channel.ex index 839d089..f77efe6 100644 --- a/lib/phoenix_live_reload/channel.ex +++ b/lib/phoenix_live_reload/channel.ex @@ -64,14 +64,12 @@ defmodule Phoenix.LiveReloader.Channel do end def handle_info({@logs, %{level: level, msg: msg, file: file, line: line}}, socket) do - if is_log_min_log_level?(socket, level) do - push(socket, "log", %{ - level: to_string(level), - msg: msg, - file: file, - line: line - }) - end + push(socket, "log", %{ + level: to_string(level), + msg: msg, + file: file, + line: line + }) {:noreply, socket} end @@ -124,13 +122,6 @@ defmodule Phoenix.LiveReloader.Channel do socket.endpoint.config(:live_reload)[:web_console_logger] == true end - defp is_log_min_log_level?(socket, log_level) do - socket.endpoint.config(:live_reload)[:web_console_logger_min_log_level] |> case do - nil -> true - level -> Logger.compare_levels(log_level, level) != :lt - end - end - defp join_info do if url = System.get_env("PLUG_EDITOR") do %{editor_url: url} diff --git a/priv/static/phoenix_live_reload.js b/priv/static/phoenix_live_reload.js index d85b82a..de37abd 100644 --- a/priv/static/phoenix_live_reload.js +++ b/priv/static/phoenix_live_reload.js @@ -42,6 +42,17 @@ let pageStrategy = channel => { window[targetWindow].location.reload() } +const elixirLogLevels = [ + "emergency", + "alert", + "critical", + "error", + "warning", + "notice" , + "info", + "debug" +] + let reloadStrategies = { css: reloadPageOnCssChanges ? pageStrategy : cssStrategy, page: pageStrategy @@ -51,6 +62,7 @@ class LiveReloader { constructor(socket){ this.socket = socket this.logsEnabled = false + this.minLogLevel = "debug" this.enabledOnce = false this.editorURL = null } @@ -70,7 +82,7 @@ class LiveReloader { let reloadStrategy = reloadStrategies[msg.asset_type] || reloadStrategies.page setTimeout(() => reloadStrategy(this.channel), interval) }) - this.channel.on("log", ({msg, level}) => this.logsEnabled && this.log(level, msg)) + this.channel.on("log", ({msg, level}) => this.logsEnabled && this.isMinLogLevel(level) && this.log(level, msg)) this.channel.join().receive("ok", ({editor_url}) => { this.editorURL = editor_url }) @@ -85,6 +97,12 @@ class LiveReloader { enableServerLogs(){ this.logsEnabled = true } disableServerLogs(){ this.logsEnabled = false } + setMinLogLevel(level){ this.minLogLevel = level } + + isMinLogLevel(level){ + return elixirLogLevels.indexOf(level) <= elixirLogLevels.indexOf(this.minLogLevel) + } + openEditorAtCaller(targetNode){ if(!this.editorURL){ return console.error("phoenix_live_reload cannot openEditorAtCaller without configured PLUG_EDITOR") diff --git a/test/channel_test.exs b/test/channel_test.exs index 8d4d4b9..e123bf2 100644 --- a/test/channel_test.exs +++ b/test/channel_test.exs @@ -152,33 +152,4 @@ defmodule Phoenix.LiveReloader.ChannelTest do assert info == %{editor_url: "vscode://file/__FILE__:__LINE__"} end - - test "send valid logs with a minimum log level" do - System.delete_env("PLUG_EDITOR") - - update_live_reload_env(@endpoint, fn conf -> - Keyword.merge(conf, web_console_logger: true, web_console_logger_min_log_level: :error) - end) - - {:ok, info, _socket} = - LiveReloader.Socket |> socket() |> subscribe_and_join(Channel, "phoenix:live_reload", %{}) - - assert info == %{} - Logger.info("hello") - - refute_receive _ - - update_live_reload_env(@endpoint, fn conf -> - Keyword.drop(conf, [:web_console_logger_min_log_level]) - end) - - {:ok, info, _socket} = - LiveReloader.Socket |> socket() |> subscribe_and_join(Channel, "phoenix:live_reload", %{}) - - assert info == %{} - - Logger.info("hello again") - assert_receive %Phoenix.Socket.Message{event: "log", payload: %{msg: msg, level: "info"}} - assert msg =~ "hello again" - end end From a47b77b60bf424078c6b21c9622f51d1f00b1286 Mon Sep 17 00:00:00 2001 From: Joshua Bouvier Date: Tue, 12 Mar 2024 14:35:11 +0000 Subject: [PATCH 3/3] move minLogLevel into enableServerLogs interface rather than having it's own --- priv/static/phoenix_live_reload.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/priv/static/phoenix_live_reload.js b/priv/static/phoenix_live_reload.js index de37abd..6299eed 100644 --- a/priv/static/phoenix_live_reload.js +++ b/priv/static/phoenix_live_reload.js @@ -94,11 +94,12 @@ class LiveReloader { socket.disconnect() } - enableServerLogs(){ this.logsEnabled = true } + enableServerLogs(level = this.minLogLevel){ + this.logsEnabled = true + this.minLogLevel = level + } disableServerLogs(){ this.logsEnabled = false } - setMinLogLevel(level){ this.minLogLevel = level } - isMinLogLevel(level){ return elixirLogLevels.indexOf(level) <= elixirLogLevels.indexOf(this.minLogLevel) }