diff --git a/config/dev.exs b/config/dev.exs index 80f17e15..a68bcd99 100644 --- a/config/dev.exs +++ b/config/dev.exs @@ -13,15 +13,15 @@ config :logger, :console, metadata: [] # File backend configuration (writes to log/dev.log) +# Backend is registered in application.ex via LoggerBackends.add/1 config :logger, :file_log, path: "log/dev.log", level: :info, format: "[$level] $message\n", metadata: [] -# Logger configuration with console and file backends +# Logger configuration config :logger, - backends: [:console, {LoggerFileBackend, :file_log}], level: :info # Initialize plugs at runtime for faster development compilation diff --git a/lib/towerops/application.ex b/lib/towerops/application.ex index ac158add..2010487b 100644 --- a/lib/towerops/application.ex +++ b/lib/towerops/application.ex @@ -19,6 +19,11 @@ defmodule Towerops.Application do # Ensure parsetools is started for MIB parsing (yecc dependency) _ = Application.ensure_all_started(:parsetools) + # Register file logger backend for development (using new LoggerBackends API) + if Application.get_env(:towerops, :env) == :dev do + register_file_logger() + end + # Add snmpkit ebin directory to code path for mib_grammar_elixir.beam # This is needed because snmpkit has vendored Erlang modules (compiled from .yrl) # Note: With pre-compiled MIBs, this may no longer be needed @@ -217,6 +222,15 @@ defmodule Towerops.Application do Keyword.merge(base_opts, resilience_opts) end + # Register file logger backend for development (only available in :dev environment) + defp register_file_logger do + if Code.ensure_loaded?(LoggerBackends) do + LoggerBackends.add(LoggerFileBackend, :file_log) + else + Logger.warning("LoggerBackends not available - file logging disabled") + end + end + @doc """ Returns the deployment timestamp. diff --git a/mix.exs b/mix.exs index 327c1260..dd338799 100644 --- a/mix.exs +++ b/mix.exs @@ -88,7 +88,8 @@ defmodule Towerops.MixProject do {:mix_audit, "~> 2.1", only: [:dev, :test], runtime: false}, {:hammer, "~> 7.2.0"}, {:cloak_ecto, "~> 1.3"}, - {:logger_file_backend, "~> 0.0.13", only: :dev} + {:logger_file_backend, "~> 0.0.13", only: :dev}, + {:logger_backends, "~> 1.0", only: :dev} ] end diff --git a/mix.lock b/mix.lock index b10a003e..6cc0c2c7 100644 --- a/mix.lock +++ b/mix.lock @@ -35,6 +35,7 @@ "jason": {:hex, :jason, "1.4.4", "b9226785a9aa77b6857ca22832cffa5d5011a667207eb2a0ad56adb5db443b8a", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "c5eb0cab91f094599f94d55bc63409236a8ec69a21a67814529e8d5f6cc90b3b"}, "lazy_html": {:hex, :lazy_html, "0.1.8", "677a8642e644eef8de98f3040e2520d42d0f0f8bd6c5cd49db36504e34dffe91", [:make, :mix], [{:cc_precompiler, "~> 0.1", [hex: :cc_precompiler, repo: "hexpm", optional: false]}, {:elixir_make, "~> 0.9.0", [hex: :elixir_make, repo: "hexpm", optional: false]}, {:fine, "~> 0.1.0", [hex: :fine, repo: "hexpm", optional: false]}], "hexpm", "0d8167d930b704feb94b41414ca7f5779dff9bca7fcf619fcef18de138f08736"}, "libcluster": {:hex, :libcluster, "3.5.0", "5ee4cfde4bdf32b2fef271e33ce3241e89509f4344f6c6a8d4069937484866ba", [:mix], [{:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.3", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "ebf6561fcedd765a4cd43b4b8c04b1c87f4177b5fb3cbdfe40a780499d72f743"}, + "logger_backends": {:hex, :logger_backends, "1.0.0", "09c4fad6202e08cb0fbd37f328282f16539aca380f512523ce9472b28edc6bdf", [:mix], [], "hexpm", "1faceb3e7ec3ef66a8f5746c5afd020e63996df6fd4eb8cdb789e5665ae6c9ce"}, "logger_file_backend": {:hex, :logger_file_backend, "0.0.14", "774bb661f1c3fed51b624d2859180c01e386eb1273dc22de4f4a155ef749a602", [:mix], [], "hexpm", "071354a18196468f3904ef09413af20971d55164267427f6257b52cfba03f9e6"}, "metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm", "69b09adddc4f74a40716ae54d140f93beb0fb8978d8636eaded0c31b6f099f16"}, "mime": {:hex, :mime, "2.0.7", "b8d739037be7cd402aee1ba0306edfdef982687ee7e9859bee6198c1e7e2f128", [:mix], [], "hexpm", "6171188e399ee16023ffc5b76ce445eb6d9672e2e241d2df6050f3c771e80ccd"},