Skip to content

Commit 7c03b8d

Browse files
committed
make logger interception more robust
Fixes #947
1 parent 3de597b commit 7c03b8d

File tree

10 files changed

+43
-29
lines changed

10 files changed

+43
-29
lines changed

apps/elixir_ls_debugger/lib/debugger/cli.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ defmodule ElixirLS.Debugger.CLI do
77
WireProtocol.intercept_output(&Output.debuggee_out/1, &Output.debuggee_err/1)
88
Launch.start_mix()
99

10-
if Version.match?(System.version(), ">= 1.15.0-dev") do
10+
if Version.match?(System.version(), ">= 1.15.0") do
1111
# make sue that debugger modules are in code path
1212
# without starting the app
1313
Mix.ensure_application!(:debugger)

apps/elixir_ls_debugger/test/debugger_test.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2331,7 +2331,7 @@ defmodule ElixirLS.Debugger.ServerTest do
23312331
Server.receive_packet(server, request(6, "threads", %{}))
23322332
assert_receive(response(_, 6, "threads", %{"threads" => threads}), 1_000)
23332333

2334-
if Version.match?(System.version(), ">= 1.15.0-dev") do
2334+
if Version.match?(System.version(), ">= 1.15.0") do
23352335
assert Enum.find(threads, &(&1["id"] == thread_id))["name"] ==
23362336
"Task.Supervised.noreply/4 #{:erlang.pid_to_list(pid)}"
23372337
else

apps/elixir_ls_debugger/test/test_helper.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
Application.put_env(:elixir_ls_debugger, :test_mode, true)
22
ExUnit.start(exclude: [pending: true])
33

4-
if Version.match?(System.version(), ">= 1.15.0-dev") do
4+
if Version.match?(System.version(), ">= 1.15.0") do
55
# make sue that debugger modules are in code path
66
# without starting the app
77
Mix.ensure_application!(:debugger)

apps/elixir_ls_utils/lib/launch.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ defmodule ElixirLS.Utils.Launch do
8080
file = ElixirLS.Utils.MixfileHelpers.mix_exs()
8181

8282
if File.regular?(file) do
83-
if Version.match?(System.version(), ">= 1.15.0-dev") do
83+
if Version.match?(System.version(), ">= 1.15.0") do
8484
Mix.ProjectStack.post_config(state_loader: {:cli, List.first(args)})
8585
end
8686

apps/language_server/lib/language_server/build.ex

Lines changed: 34 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -113,9 +113,20 @@ defmodule ElixirLS.LanguageServer.Build do
113113

114114
Mix.Task.clear()
115115

116-
if Version.match?(System.version(), ">= 1.15.0-dev") do
116+
if Version.match?(System.version(), ">= 1.15.0") do
117117
if Logger.Backends.JsonRpc not in :logger.get_handler_ids() do
118-
raise "build without intercepted logger #{inspect(:logger.get_handler_ids())}"
118+
Logger.error("Build without intercepted logger #{inspect(:logger.get_handler_ids())}")
119+
120+
for handler_id <- :logger.get_handler_ids() do
121+
:ok = :logger.remove_handler(handler_id)
122+
end
123+
124+
:ok =
125+
:logger.add_handler(
126+
Logger.Backends.JsonRpc,
127+
Logger.Backends.JsonRpc,
128+
Logger.Backends.JsonRpc.handler_config()
129+
)
119130
end
120131
end
121132

@@ -168,28 +179,31 @@ defmodule ElixirLS.LanguageServer.Build do
168179
# store log config
169180
logger_config = Application.get_all_env(:logger)
170181

171-
logger_handler_configs =
172-
if Version.match?(System.version(), ">= 1.15.0-dev") do
173-
for handler_id <- :logger.get_handler_ids() do
174-
{:ok, config} = :logger.get_handler_config(handler_id)
182+
try do
183+
Mix.Task.run("loadconfig")
184+
after
185+
# reset log config
186+
Application.put_all_env(logger: logger_config)
187+
188+
if Version.match?(System.version(), ">= 1.15.0") do
189+
# remove all log handlers and restore our
190+
for handler_id <- :logger.get_handler_ids(), handler_id != Logger.Backends.JsonRpc do
175191
:ok = :logger.remove_handler(handler_id)
176-
config
177192
end
178-
end
179-
180-
Mix.Task.run("loadconfig")
181193

182-
# reset log config
183-
Application.put_all_env(logger: logger_config)
184-
185-
if Version.match?(System.version(), ">= 1.15.0-dev") do
186-
for config <- logger_handler_configs do
187-
:ok = :logger.add_handler(config.id, config.module, config)
194+
if Logger.Backends.JsonRpc not in :logger.get_handler_ids() do
195+
:ok =
196+
:logger.add_handler(
197+
Logger.Backends.JsonRpc,
198+
Logger.Backends.JsonRpc,
199+
Logger.Backends.JsonRpc.handler_config()
200+
)
201+
end
188202
end
189-
end
190203

191-
# make sure ANSI is disabled
192-
Application.put_env(:elixir, :ansi_enabled, false)
204+
# make sure ANSI is disabled
205+
Application.put_env(:elixir, :ansi_enabled, false)
206+
end
193207
end
194208

195209
{status, diagnostics}
@@ -212,7 +226,7 @@ defmodule ElixirLS.LanguageServer.Build do
212226
]
213227

214228
opts =
215-
if Version.match?(System.version(), ">= 1.15.0-dev") do
229+
if Version.match?(System.version(), ">= 1.15.0") do
216230
opts
217231
else
218232
opts ++ ["--all-warnings"]

apps/language_server/lib/language_server/cli.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ defmodule ElixirLS.LanguageServer.CLI do
1010

1111
# :logger application is already started
1212
# replace console logger with LSP
13-
if Version.match?(System.version(), ">= 1.15.0-dev") do
13+
if Version.match?(System.version(), ">= 1.15.0") do
1414
:ok = :logger.remove_handler(:default)
1515

1616
:ok =

apps/language_server/lib/language_server/experimental/code_mod/format.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ defmodule ElixirLS.LanguageServer.Experimental.CodeMod.Format do
5353
true = Code.ensure_loaded?(Mix.Tasks.Format)
5454

5555
{formatter_function, options} =
56-
if project_dir && Version.match?(System.version(), ">= 1.15.0-dev") do
56+
if project_dir && Version.match?(System.version(), ">= 1.15.0") do
5757
Mix.Tasks.Format.formatter_for_file(path, root: project_dir)
5858
else
5959
Mix.Tasks.Format.formatter_for_file(path)

apps/language_server/lib/language_server/source_file.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,7 @@ defmodule ElixirLS.LanguageServer.SourceFile do
236236
try do
237237
true = Code.ensure_loaded?(Mix.Tasks.Format)
238238

239-
if project_dir && Version.match?(System.version(), ">= 1.15.0-dev") do
239+
if project_dir && Version.match?(System.version(), ">= 1.15.0") do
240240
{:ok, Mix.Tasks.Format.formatter_for_file(path, root: project_dir)}
241241
else
242242
{:ok, Mix.Tasks.Format.formatter_for_file(path)}

apps/language_server/test/server_test.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1038,7 +1038,7 @@ defmodule ElixirLS.LanguageServer.ServerTest do
10381038

10391039
initialize(server)
10401040

1041-
if Version.match?(System.version(), ">= 1.15.0-dev") do
1041+
if Version.match?(System.version(), ">= 1.15.0") do
10421042
assert_receive notification("textDocument/publishDiagnostics", %{
10431043
"uri" => ^error_file,
10441044
"diagnostics" => [

apps/language_server/test/support/server_test_helpers.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ defmodule ElixirLS.LanguageServer.Test.ServerTestHelpers do
2626
def replace_logger(packet_capture) do
2727
# :logger application is already started
2828
# replace console logger with LSP
29-
if Version.match?(System.version(), ">= 1.15.0-dev") do
29+
if Version.match?(System.version(), ">= 1.15.0") do
3030
configs =
3131
for handler_id <- :logger.get_handler_ids() do
3232
{:ok, config} = :logger.get_handler_config(handler_id)

0 commit comments

Comments
 (0)