LoggerJSON is now a set of :logger formatters
This package has undergone a full rewrite and now it's just a set of Erlang's :logger
formatters. This means it has a much better integration with the ecosystem and the (outdated) custom Elixir's Logger
backend is removed.
The minimum supported Elixir version is now 1.15
.
Notable changes
- The logged structure for all providers has been updated to get up to date with the latest changes on those providers (eg. more metadata is logged for
GoogleCloud
andDataDog
;Basic
logs are cleaner); GoogleCloud
formatter now logs errors that are recognized by Google Cloud Error Reporting;- Now you can redact values in map/keyword/struct using a new
LoggerJSON.Redactors.RedactKeys
redactor; - Both
LoggerJSON.Plug
andLoggerJSON.Ecto
are now attached using Telemetry (old instrumentation callbacks are removed). Please keep in mind that using them in production is discouraged as it can be very expensive to log on every single request/database query; - We don't use
Jason.Encoder
protocol for structs anymore and just encode them as any other map. - A formatter for ElasticSearch, LogStash, FileBeat, and Kibana is added by @bvobart.
Upgrading from 5.X
- Update the package in
mix.exs
and then runmix deps.get
:
++ {:logger_json, "~> 5.1"}
-- {:logger_json, "~> 6.0"}
- Replace the legacy backend configuration and configure a default handler formatter instead:
--config :logger,
-- backends: [LoggerJSON]
--
--config :logger_json, :backend,
-- metadata: {:all_except, [:conn]},
-- json_encoder: Jason,
-- formatter: LoggerJSON.Formatters.GoogleCloudLogger
++ config :logger, :default_handler,
++ formatter: {LoggerJSON.Formatters.GoogleCloud, metadata: {:all_except, [:conn]}}
- If you are using Phoenix then remove the old usage of
LoggerJSON.Plug
in your endpoint:
--plug LoggerJSON.Plug
and attach the LoggerJSON.Plug
to the telemetry events in your application.ex
:
LoggerJSON.Plug.attach("logger-json-phoenix", [:phoenix, :endpoint, :stop], :info)
If you use Plug directly, replace the old usage of LoggerJSON.Plug
in your endpoint:
--plug LoggerJSON.Plug
++plug Plug.Telemetry, event_prefix: [:myapp, :plug]
and attach it using a telemetry in your application.ex
:
LoggerJSON.Plug.attach("logger-json-requests, [:myapp, :plug, :stop], :info)