chore(portal): Bump LoggerJSON to 7.0.0, fixing config (#8759)

There was slight API change in the way LoggerJSON's configuration is
generation, so I took the time to do a little fixing and cleanup here.

Specifically, we should be using the `new/1` callback to create the
Logger config which fixes the below exception due to missing config
keys:

```
FORMATTER CRASH: {report,[{formatter_crashed,'Elixir.LoggerJSON.Formatters.GoogleCloud'},{config,[{metadata,{all_except,[socket,conn]}},{redactors,[{'Elixir.LoggerJSON.Redactors.RedactKeys',[<<"password">>,<<"secret">>,<<"nonce">>,<<"fragment">>,<<"state">>,<<"token">>,<<"public_key">>,<<"private_key">>,<<"preshared_key">>,<<"session">>,<<"sessions">>]}]}]},{log_event,#{meta => #{line => 15,pid => <0.308.0>,time => 1744145139650804,file => "lib/logger.ex",gl => <0.281.0>,domain => [elixir],application => libcluster,mfa => {'Elixir.Cluster.Logger',info,2}},msg => {string,<<"[libcluster:default] connected to :\"web@web.cluster.local\"">>},level => info}},{reason,{error,{badmatch,[{metadata,{all_except,[socket,conn]}},{redactors,[{'Elixir.LoggerJSON.Redactors.RedactKeys',[<<"password">>,<<"secret">>,<<"nonce">>,<<"fragment">>,<<"state">>,<<"token">>,<<"public_key">>,<<"private_key">>,<<"preshared_key">>,<<"session">>,<<"sessions">>]}]}]},[{'Elixir.LoggerJSON.Formatters.GoogleCloud',format,2,[{file,"lib/logger_json/formatters/google_cloud.ex"},{line,148}]}]}}]}
```

Supersedes #8714

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
This commit is contained in:
Jamil
2025-04-11 19:00:06 -07:00
committed by GitHub
parent f9b4b37dca
commit 649c03e290
13 changed files with 75 additions and 80 deletions

View File

@@ -3,18 +3,11 @@ defmodule API.Application do
@impl true
def start(_type, _args) do
configure_logger()
_ = :opentelemetry_cowboy.setup()
_ = OpentelemetryPhoenix.setup(adapter: :cowboy2)
# Configure Sentry to capture Logger messages
:logger.add_handler(:sentry, Sentry.LoggerHandler, %{
config: %{
level: :warning,
metadata: :all,
capture_log_messages: true
}
})
children = [
API.Endpoint,
API.RateLimit
@@ -29,4 +22,20 @@ defmodule API.Application do
API.Endpoint.config_change(changed, removed)
:ok
end
defp configure_logger do
if config = Application.get_env(:logger_json, :config) do
formatter = LoggerJSON.Formatters.GoogleCloud.new(config)
:logger.update_handler_config(:default, :formatter, formatter)
end
# Configure Sentry to capture Logger messages
:logger.add_handler(:sentry, Sentry.LoggerHandler, %{
config: %{
level: :warning,
metadata: :all,
capture_log_messages: true
}
})
end
end

View File

@@ -55,6 +55,7 @@ defmodule API.MixProject do
{:opentelemetry_phoenix, "~> 2.0"},
{:sentry, "~> 10.0"},
{:hackney, "~> 1.19"},
{:logger_json, "~> 7.0"},
# Other deps
{:jason, "~> 1.2"},

View File

@@ -2,21 +2,11 @@ defmodule Domain.Application do
use Application
def start(_type, _args) do
# Configure Logger severity at runtime
:ok = LoggerJSON.configure_log_level_from_env!("LOG_LEVEL")
configure_logger()
_ = OpentelemetryLoggerMetadata.setup()
_ = OpentelemetryEcto.setup([:domain, :repo])
# Configure Sentry to capture Logger messages
:logger.add_handler(:sentry, Sentry.LoggerHandler, %{
config: %{
level: :warning,
metadata: :all,
capture_log_messages: true
}
})
# Can be uncommented when this bug is fixed: https://github.com/open-telemetry/opentelemetry-erlang-contrib/issues/327
# _ = OpentelemetryFinch.setup()
@@ -50,4 +40,23 @@ defmodule Domain.Application do
Domain.Telemetry
]
end
defp configure_logger do
# Configure Logger severity at runtime
:ok = LoggerJSON.configure_log_level_from_env!("LOG_LEVEL")
if config = Application.get_env(:logger_json, :config) do
formatter = LoggerJSON.Formatters.GoogleCloud.new(config)
:logger.update_handler_config(:default, :formatter, formatter)
end
# Configure Sentry to capture Logger messages
:logger.add_handler(:sentry, Sentry.LoggerHandler, %{
config: %{
level: :warning,
metadata: :all,
capture_log_messages: true
}
})
end
end

View File

@@ -125,9 +125,7 @@ defmodule Domain.Config.Definitions do
:instrumentation_client_logs_enabled,
:instrumentation_client_logs_bucket,
:telemetry_metrics_reporter,
:telemetry_metrics_reporter_opts,
:logger_formatter,
:logger_formatter_opts
:telemetry_metrics_reporter_opts
]},
{"Analytics",
[
@@ -540,29 +538,6 @@ defmodule Domain.Config.Definitions do
dump: &Dumper.keyword/1
)
@doc """
A formatter to use for the Elixir's Logger. If not set, the default formatter will be used.
"""
defconfig(
:logger_formatter,
Ecto.ParameterizedType.init(Ecto.Enum,
values: [
Elixir.LoggerJSON.Formatters.GoogleCloud,
Elixir.LoggerJSON.Formatters.Basic,
Elixir.LoggerJSON.Formatters.Datadog
]
),
default: nil
)
@doc """
Options for the logger formatter that is set by `logger_formatter` option.
"""
defconfig(:logger_formatter_opts, :map,
default: %{},
dump: &Dumper.keyword/1
)
##############################################
## Gateways
##############################################

View File

@@ -80,7 +80,6 @@ defmodule Domain.MixProject do
{:telemetry, "~> 1.0"},
{:telemetry_poller, "~> 1.0"},
{:telemetry_metrics, "~> 1.0"},
{:logger_json, "~> 6.0"},
{:recon, "~> 2.5"},
{:observer_cli, "~> 1.7"},
{:opentelemetry, "~> 1.5"},
@@ -88,6 +87,9 @@ defmodule Domain.MixProject do
{:opentelemetry_exporter, "~> 1.8"},
{:opentelemetry_ecto, "~> 1.2"},
{:opentelemetry_finch, "~> 0.2.0"},
{:sentry, "~> 10.0"},
{:hackney, "~> 1.19"},
{:logger_json, "~> 7.0"},
# Other application deps
{:tzdata, "~> 1.1"},

View File

@@ -3,19 +3,12 @@ defmodule Web.Application do
@impl true
def start(_type, _args) do
configure_logger()
_ = OpentelemetryLiveView.setup()
_ = :opentelemetry_cowboy.setup()
_ = OpentelemetryPhoenix.setup(adapter: :cowboy2)
# Configure Sentry to capture Logger messages
:logger.add_handler(:sentry, Sentry.LoggerHandler, %{
config: %{
level: :warning,
metadata: :all,
capture_log_messages: true
}
})
children = [
Web.Endpoint
]
@@ -29,4 +22,20 @@ defmodule Web.Application do
Web.Endpoint.config_change(changed, removed)
:ok
end
defp configure_logger do
if config = Application.get_env(:logger_json, :config) do
formatter = LoggerJSON.Formatters.GoogleCloud.new(config)
:logger.update_handler_config(:default, :formatter, formatter)
end
# Configure Sentry to capture Logger messages
:logger.add_handler(:sentry, Sentry.LoggerHandler, %{
config: %{
level: :warning,
metadata: :all,
capture_log_messages: true
}
})
end
end

View File

@@ -68,6 +68,7 @@ defmodule Web.MixProject do
{:nimble_options, "~> 1.0", override: true},
{:sentry, "~> 10.0"},
{:hackney, "~> 1.19"},
{:logger_json, "~> 7.0"},
# Other deps
{:jason, "~> 1.2"},

View File

@@ -285,6 +285,8 @@ config :sentry,
Path.join(File.cwd!(), "apps/api")
]
config :logger_json, encoder: JSON
# Import environment specific config. This must remain at the bottom
# of this file so it overrides the configuration defined above.
import_config "#{Mix.env()}.exs"

View File

@@ -51,13 +51,11 @@ config :logger,
handle_sasl_reports: false,
handle_otp_reports: true
config :logger, :default_handler,
formatter:
{LoggerJSON.Formatters.GoogleCloud,
metadata: {:all_except, [:socket, :conn]},
redactors: [
{LoggerJSON.Redactors.RedactKeys, secret_keys}
]}
config :logger_json, :config,
metadata: {:all_except, [:socket, :conn, :otel_trace_flags]},
redactors: [
{LoggerJSON.Redactors.RedactKeys, secret_keys}
]
config :logger, level: :info

View File

@@ -209,14 +209,6 @@ if config_env() == :prod do
##### Third-party configs #####
###############################
if logger_formatter = compile_config!(:logger_formatter) do
logger_formatter_opts =
compile_config!(:logger_formatter_opts) ++
[metadata: {:all_except, [:socket, :conn, :otel_trace_flags]}]
config :logger, :default_handler, formatter: {logger_formatter, logger_formatter_opts}
end
if System.get_env("OTLP_ENDPOINT") do
config :opentelemetry, resource_detectors: [:otel_resource_env_var, :otel_resource_app_env]

View File

@@ -36,6 +36,9 @@ defmodule Firezone.MixProject do
[
# Shared deps
{:jason, "~> 1.2"},
{:sentry, "~> 10.0"},
{:hackney, "~> 1.19"},
{:logger_json, "~> 7.0"},
# Shared test deps
{:credo, "~> 1.5", only: [:dev, :test], runtime: false},

View File

@@ -50,7 +50,7 @@
"jose": {:hex, :jose, "1.11.10", "a903f5227417bd2a08c8a00a0cbcc458118be84480955e8d251297a425723f83", [:mix, :rebar3], [], "hexpm", "0d6cd36ff8ba174db29148fc112b5842186b68a90ce9fc2b3ec3afe76593e614"},
"junit_formatter": {:hex, :junit_formatter, "3.4.0", "d0e8db6c34dab6d3c4154c3b46b21540db1109ae709d6cf99ba7e7a2ce4b1ac2", [:mix], [], "hexpm", "bb36e2ae83f1ced6ab931c4ce51dd3dbef1ef61bb4932412e173b0cfa259dacd"},
"libcluster": {:hex, :libcluster, "3.3.3", "a4f17721a19004cfc4467268e17cff8b1f951befe428975dd4f6f7b84d927fe0", [:mix], [{:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "7c0a2275a0bb83c07acd17dab3c3bfb4897b145106750eeccc62d302e3bdfee5"},
"logger_json": {:hex, :logger_json, "6.2.0", "13e2e9f5f7b195865c5c3ef3d296c3ad50e7ecb038d899433702a79e979b91d7", [:mix], [{:ecto, "~> 3.11", [hex: :ecto, repo: "hexpm", optional: true]}, {:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: false]}, {:plug, "~> 1.15", [hex: :plug, repo: "hexpm", optional: true]}, {:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: true]}], "hexpm", "98366d02bedbb56e41b25a6d248d566d4f4bc224bae2b1e982df00ed04ba9219"},
"logger_json": {:hex, :logger_json, "7.0.0", "d644e499cf137346c58eedb5045ac06b14759881f80b9eb789009736d4da933d", [:mix], [{:decimal, ">= 0.0.0", [hex: :decimal, repo: "hexpm", optional: true]}, {:ecto, "~> 3.11", [hex: :ecto, repo: "hexpm", optional: true]}, {:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: true]}, {:plug, "~> 1.15", [hex: :plug, repo: "hexpm", optional: true]}, {:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: true]}], "hexpm", "91e02738ba93d39cb902ff54fcaa8ea23cd466147467b627fe35475021309b01"},
"metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm", "69b09adddc4f74a40716ae54d140f93beb0fb8978d8636eaded0c31b6f099f16"},
"mime": {:hex, :mime, "2.0.6", "8f18486773d9b15f95f4f4f1e39b710045fa1de891fada4516559967276e4dc2", [:mix], [], "hexpm", "c9945363a6b26d747389aac3643f8e0e09d30499a138ad64fe8fd1d13d9b153e"},
"mimerl": {:hex, :mimerl, "1.3.0", "d0cd9fc04b9061f82490f6581e0128379830e78535e017f7780f37fea7545726", [:rebar3], [], "hexpm", "a1e15a50d1887217de95f0b9b0793e32853f7c258a5cd227650889b38839fe9d"},

View File

@@ -48,14 +48,8 @@ locals {
})
},
{
name = "LOGGER_FORMATTER"
value = "Elixir.LoggerJSON.Formatters.GoogleCloud"
},
{
name = "LOGGER_FORMATTER_OPTS"
value = jsonencode({
project_id = var.project_id
})
name = "GOOGLE_CLOUD_PROJECT",
value = var.project_id
},
{
name = "PLATFORM_ADAPTER"