Closed fullstackdude closed 1 year ago
Can you please specify a small application that reproduces the error?
The error doesn't mention Phoenix and may be unrelated to it.
Also note that you may be configuring the Logger too early, so something is trying to use it, and it has not been compiled it. You should probably add it on your Application.start callback. Note you also don't need a separate dep for this, please see: https://elixirforum.com/t/logging-to-disk-with-rotation/53026
It is likely that logger_file_backend
has to be added in applications and has not been mentioned.
def application do
[applications: [
...,
:logger_file_backend,
...
]
]
end
As given in documentation.
Closing. Please let us know if we can reproduce it.
Environment
Expected behavior
Logging to file is expected to work. Config is as follows...
config :logger, backends: [{LoggerFileBackend, :error_log}], format: "$date $time $metadata[$level] $message\n", metadata: [:request_id]
config :logger, :error_log, path: "/var/log/myapp/error.log", level: :debug
The config was placed first in config.exs, then moved to prod.exs, with the same error result from both.
This is a very simple function and config, so perhaps something has changed in the config, etc? Not finding anything at SO or irc. If something has changed and you explain it I am more than happy to update the documentation. Thank you.
Actual behavior
App crashes with core dump, console shows following error both in dev and prod:
(Mix) Could not start application logger: Logger.App.start(:normal, []) returned an error: shutdown: failed to start child: Logger.BackendSupervisor (EXIT) an exception was raised: (RuntimeError) EXIT when installing backend {LoggerFileBackend, :error_log}: an exception was raised: (UndefinedFunctionError) function LoggerFileBackend.init/1 is undefined (module LoggerFileBackend is not available) LoggerFileBackend.init({LoggerFileBackend, :error_log}) (stdlib 4.2) gen_event.erl:698: :gen_event.server_add_handler/4 (stdlib 4.2) gen_event.erl:544: :gen_event.handle_msg/6 (stdlib 4.2) proc_lib.erl:240: :proc_lib.init_p_do_apply/3 (logger 1.14.1) lib/logger/backend_supervisor.ex:19: anonymous fn/2 in Logger.BackendSupervisor.start_link/1 (elixir 1.14.1) lib/enum.ex:2468: Enum."-reduce/3-lists^foldl/2-0-"/3 (logger 1.14.1) lib/logger/backend_supervisor.ex:13: Logger.BackendSupervisor.start_link/1 (stdlib 4.2) supervisor.erl:414: :supervisor.do_start_child_i/3 (stdlib 4.2) supervisor.erl:400: :supervisor.do_start_child/2 (stdlib 4.2) supervisor.erl:384: anonymous fn/3 in :supervisor.start_children/2 (stdlib 4.2) supervisor.erl:1250: :supervisor.children_map/4 (stdlib 4.2) supervisor.erl:350: :supervisor.init_children/2
Mix.exs is as follows...
defmodule Myapp.MixProject do use Mix.Project
def project do [ app: :myapp, version: "0.1.0", elixir: "~> 1.14", elixirc_paths: elixirc_paths(Mix.env()), start_permanent: Mix.env() == :prod, aliases: aliases(), deps: deps() ] end
Configuration for the OTP application.
#
Type
mix help compile.app
for more information.def application do [ mod: {Myapp.Application, []}, extra_applications: [:logger, :runtime_tools] ] end
Specifies which paths to compile per environment.
defp elixirc_paths(:test), do: ["lib", "test/support"] defp elixircpaths(), do: ["lib"]
Specifies your project dependencies.
#
Type
mix help deps
for examples and options.defp deps do [ {:phoenix, "~> 1.7.0-rc.1", override: true}, {:phoenix_ecto, "~> 4.4"}, {:ecto_sql, "~> 3.6"}, {:postgrex, ">= 0.0.0"}, {:phoenix_html, "~> 3.0"}, {:phoenix_live_reload, "~> 1.2", only: :dev}, {:phoenix_live_view, "~> 0.18.3"}, {:heroicons, "~> 0.5"}, {:floki, ">= 0.30.0", only: :test}, {:phoenix_live_dashboard, "~> 0.7.2"}, {:esbuild, "~> 0.5", runtime: Mix.env() == :dev}, {:tailwind, "~> 0.1.8", runtime: Mix.env() == :dev}, {:swoosh, "~> 1.3"}, {:finch, "~> 0.13"}, {:telemetry_metrics, "~> 0.6"}, {:telemetry_poller, "~> 1.0"}, {:gettext, "~> 0.20"}, {:jason, "~> 1.2"}, {:plug_cowboy, "~> 2.5"} ] end
Aliases are shortcuts or tasks specific to the current project.
For example, to install project dependencies and perform other setup tasks, run:
#
$ mix setup
#
See the documentation for
Mix
for more info on aliases.defp aliases do [ setup: ["deps.get", "ecto.setup"], "ecto.setup": ["ecto.create", "ecto.migrate", "run priv/repo/seeds.exs"], "ecto.reset": ["ecto.drop", "ecto.setup"], test: ["ecto.create --quiet", "ecto.migrate --quiet", "test"], "assets.deploy": ["tailwind default --minify", "esbuild default --minify", "phx.digest"] ] end end