Skip to content

LoggerJSON is now a set of :logger formatters

Compare
Choose a tag to compare
@AndrewDryga AndrewDryga released this 14 May 01:02
· 33 commits to master since this release
8e855e0

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 and DataDog; 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 and LoggerJSON.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

  1. Update the package in mix.exs and then run mix deps.get:
++ {:logger_json, "~> 5.1"}
-- {:logger_json, "~> 6.0"}
  1. 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]}}
  1. 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)