commit: c389ea0f42bf01bbc463e9e237162aab3dabf7a7
parent ba6afdb44de43e4057e7c8972195402097d43dc6
Author: Haelwenn (lanodan) Monnier <contact@hacktivis.me>
Date: Sun, 24 Dec 2023 10:45:29 +0100
Fix compatibility with Loggers in Elixir 1.15+
Diffstat:
7 files changed, 44 insertions(+), 18 deletions(-)
diff --git a/config/config.exs b/config/config.exs
@@ -132,6 +132,8 @@ config :pleroma, Pleroma.Web.Endpoint,
]
# Configures Elixir's Logger
+config :logger, backends: [:console]
+
config :logger, :console,
level: :debug,
format: "\n$time $metadata[$level] $message\n",
diff --git a/config/description.exs b/config/description.exs
@@ -1237,8 +1237,8 @@ config :pleroma, :config_description, [
key: :backends,
type: [:atom, :tuple, :module],
description:
- "Where logs will be sent, :console - send logs to stdout, { ExSyslogger, :ex_syslogger } - to syslog, Quack.Logger - to Slack.",
- suggestions: [:console, {ExSyslogger, :ex_syslogger}]
+ "Where logs will be sent, Logger.Backends.Console - send logs to stdout, { ExSyslogger, :ex_syslogger } - to syslog.",
+ suggestions: [Logger.Backends.Console, {ExSyslogger, :ex_syslogger}]
}
]
},
@@ -1278,7 +1278,7 @@ config :pleroma, :config_description, [
%{
group: :logger,
type: :group,
- key: :console,
+ key: Logger.Backends.Console,
label: "Console Logger",
description: "Console logger settings",
children: [
diff --git a/config/dev.exs b/config/dev.exs
@@ -36,7 +36,7 @@ config :pleroma, Pleroma.Emails.Mailer, adapter: Swoosh.Adapters.Local
# different ports.
# Do not include timestamps in development logs
-config :logger, :console, format: "$metadata[$level] $message\n"
+config :logger, Logger.Backends.Console, format: "$metadata[$level] $message\n"
# Set a higher stacktrace during development. Avoid configuring such
# in production as building large stacktraces may be expensive.
diff --git a/config/prod.exs b/config/prod.exs
@@ -20,7 +20,7 @@ config :pleroma, Pleroma.Web.Endpoint,
config :phoenix, serve_endpoints: true
# Do not print debug messages in production
-config :logger, :console, level: :info
+config :logger, Logger.Backends.Console, level: :info
config :logger, :ex_syslogger, level: :info
# ## SSL Support
diff --git a/lib/pleroma/config/transfer_task.ex b/lib/pleroma/config/transfer_task.ex
@@ -1,5 +1,5 @@
# Pleroma: A lightweight social networking server
-# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
+# Copyright © 2017-2023 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.Config.TransferTask do
@@ -13,6 +13,13 @@ defmodule Pleroma.Config.TransferTask do
@type env() :: :test | :benchmark | :dev | :prod
+ @add_backend if Version.match?(System.version(), "< 1.15.0-rc.0"),
+ do: &Logger.add_backend/1,
+ else: &LoggerBackends.add/1
+ @remove_backend if Version.match?(System.version(), "< 1.15.0-rc.0"),
+ do: &Logger.remove_backend/1,
+ else: &LoggerBackends.remove/1
+
defp reboot_time_keys,
do: [
{:pleroma, :hackney_pools},
@@ -105,26 +112,30 @@ defmodule Pleroma.Config.TransferTask do
# change logger configuration in runtime, without restart
defp configure({_, :backends, _, merged}) do
# removing current backends
- Enum.each(Application.get_env(:logger, :backends), &Logger.remove_backend/1)
+ Enum.each(Application.get_env(:logger, :backends), @remove_backend)
- Enum.each(merged, &Logger.add_backend/1)
+ Enum.each(merged, @add_backend)
:ok = update_env(:logger, :backends, merged)
end
- defp configure({_, key, _, merged}) when key in [:console, :ex_syslogger] do
+ defp configure({_, key, _, merged})
+ when key in [:console, Logger.Backends.Console, :ex_syslogger] do
+ backend =
+ case key do
+ :ex_syslogger -> {ExSyslogger, :ex_syslogger}
+ :console -> Logger.Backends.Console
+ Logger.Backends.Console -> Logger.Backends.Console
+ key -> key
+ end
+
merged =
- if key == :console do
+ if backend == Logger.Backends.Console do
put_in(merged[:format], merged[:format] <> "\n")
else
merged
end
- backend =
- if key == :ex_syslogger,
- do: {ExSyslogger, :ex_syslogger},
- else: key
-
Logger.configure_backend(backend, merged)
:ok = update_env(:logger, key, merged)
end
diff --git a/lib/pleroma/config_db.ex b/lib/pleroma/config_db.ex
@@ -385,7 +385,12 @@ defmodule Pleroma.ConfigDB do
@spec module_name?(String.t()) :: boolean()
def module_name?(string) do
- Regex.match?(~r/^(Pleroma|Phoenix|Tesla|Ueberauth|Swoosh)\./, string) or
- string in ["Oban", "Ueberauth", "ExSyslogger", "ConcurrentLimiter"]
+ if String.contains?(string, ".") do
+ [name | _] = String.split(string, ".", parts: 2)
+
+ name in ~w[Pleroma Phoenix Tesla Ueberauth Swoosh Logger LoggerBackends]
+ else
+ string in ~w[Oban Ueberauth ExSyslogger ConcurrentLimiter]
+ end
end
end
diff --git a/mix.exs b/mix.exs
@@ -109,6 +109,14 @@ defmodule Pleroma.Mixfile do
for s <- oauth_strategy_packages, do: {String.to_atom(s), ">= 0.0.0"}
end
+ defp logger_deps do
+ if Version.match?(System.version(), "<1.15.0-rc.0") do
+ []
+ else
+ [{:logger_backends, "~> 1.0"}]
+ end
+ end
+
# Specifies your project dependencies.
#
# Type `mix help deps` for examples and options.
@@ -197,7 +205,7 @@ defmodule Pleroma.Mixfile do
{:websockex, "~> 0.4.3", only: :test},
{:benchee, "~> 1.0", only: :benchmark},
{:dialyxir, "~> 1.4", only: [:dev, :test], runtime: false}
- ] ++ oauth_deps()
+ ] ++ oauth_deps() ++ logger_deps()
end
# Aliases are shortcuts or tasks specific to the current project.