Packages
appsignal
2.15.10
2.17.4
2.17.3
2.17.2
2.17.1
2.17.0
2.16.0
2.15.11
2.15.10
2.15.9
2.15.8
2.15.7
2.15.6
2.15.5
2.15.4
2.15.3
2.15.2
2.15.1
2.15.0
2.14.1
2.14.0
2.13.4
2.13.3
2.13.2
2.13.1
2.13.0
2.12.3
2.12.2
2.12.1
2.12.0
2.11.0
2.10.2
2.10.1
2.10.0
2.9.2
2.9.1
2.9.0
2.8.3
2.8.2
2.8.1
2.8.0
2.7.13
2.7.12
2.7.11
2.7.10
2.7.9
2.7.8
2.7.7
2.7.6
2.7.5
2.7.4
2.7.3
2.7.2
2.7.1
2.7.0
2.7.0-beta.1
2.6.1
2.6.0
2.5.3
2.5.2
2.5.1
2.5.0
2.4.3
2.4.2
2.4.1
2.4.0
2.3.1
2.3.0
2.2.19
2.2.18
2.2.17
2.2.16
2.2.15
2.2.14
2.2.13
2.2.12
retired
2.2.11
2.2.10
2.2.9
2.2.8
2.2.7
2.2.6
2.2.5
2.2.4
2.2.3
2.2.2
2.2.1
2.2.0
2.1.15
2.1.14
2.1.13
2.1.12
2.1.11
2.1.10
2.1.9
2.1.8
2.1.7
2.1.7-beta.1
2.1.6
2.1.5
2.1.4
2.1.3
2.1.2
2.1.1
2.1.0
2.0.8
2.0.7
2.0.6
2.0.6-beta.1
2.0.5
retired
2.0.4
retired
2.0.3
retired
2.0.2
retired
2.0.1
retired
2.0.0
retired
2.0.0-beta.11
2.0.0-beta.10
2.0.0-beta.9
2.0.0-beta.8
2.0.0-beta.7
2.0.0-beta.6
2.0.0-beta.5
2.0.0-beta.4
2.0.0-beta.3
2.0.0-beta.2
2.0.0-beta.1
2.0.0-alpha.7
2.0.0-alpha.6
2.0.0-alpha.5
2.0.0-alpha.4
2.0.0-alpha.3
2.0.0-alpha.2
2.0.0-alpha.1
1.13.5
1.13.4
1.13.3
1.13.2
1.13.1
1.13.0
1.13.0-beta.2
1.13.0-beta.1
1.12.1
1.12.0
1.12.0-beta.3
1.12.0-beta.2
1.12.0-beta.1
1.11.8
1.11.7
1.11.6
1.11.5
1.11.4
1.11.3
1.11.2
1.11.1
1.11.0
1.11.0-beta.1
1.10.13
1.10.12
1.10.11
1.10.10
1.10.9
1.10.8
1.10.7
1.10.6
1.10.5
1.10.4
1.10.3
1.10.2
1.10.1
1.10.0
1.9.4
1.9.3
1.9.2
1.9.1
1.9.1-beta.1
1.9.0
1.9.0-beta.1
1.9.0-alpha.1
1.8.2
1.8.1
1.8.1-beta.2
1.8.1-beta.1
1.8.0
1.7.2
1.7.1
1.7.0
1.7.0-beta.2
1.7.0-beta.1
1.7.0-alpha.4
1.7.0-alpha.3
1.7.0-alpha.2
1.7.0-alpha.1
1.6.7
1.6.6
1.6.6-beta.2
1.6.6-beta.1
1.6.5
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.6.0-beta.1
1.6.0-alpha.1
1.5.1
1.5.0
1.5.0-beta.2
1.5.0-beta.1
1.4.11-beta.1
1.4.10
1.4.9
1.4.8
1.4.7
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.4.0-alpha.1
1.3.6
1.3.6-beta.1
1.3.5
1.3.4
1.3.4-beta.1
1.3.3
1.3.2
1.3.1
1.3.0
1.3.0-beta.3
1.3.0-beta.2
1.3.0-beta.1
1.2.3
1.2.2
1.2.1
1.2.0
1.1.1
1.1.0
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
1.0.0-rc.1
0.13.0
0.12.3
0.12.2
0.12.1
0.12.0
0.11.6
0.11.5
0.11.4
0.11.3
0.11.2
0.11.1
0.11.0
0.10.0
0.9.2
0.9.1
0.9.0
0.8.0
0.7.1
0.7.0
0.6.2
0.6.1
0.6.0
0.5.0
0.4.0
0.3.0
0.2.0
0.1.0
0.0.9
0.0.8
0.0.7
0.0.6
0.0.5
0.0.4
0.0.3
0.0.2
0.0.1
Collects error and performance data from your Elixir applications and sends it to AppSignal
Current section
280 Versions
Jump to
Current section
280 Versions
Compare versions
4
files changed
+68
additions
-16
deletions
| @@ -1,5 +1,13 @@ | |
| 1 1 | # AppSignal for Elixir changelog |
| 2 2 | |
| 3 | + ## 2.15.10 |
| 4 | + |
| 5 | + _Published on 2025-07-22._ |
| 6 | + |
| 7 | + ### Fixed |
| 8 | + |
| 9 | + - Fix compatibility with Phoenix 1.18's parameter filtering compiled patterns. This will errors on boot about the AppSignal handlers not attaching. (patch [1449b9e9](https://github.com/appsignal/appsignal-elixir/commit/1449b9e9e61beea9dd249b29b86e539ebdf6303a)) |
| 10 | + |
| 3 11 | ## 2.15.9 |
| 4 12 | |
| 5 13 | _Published on 2025-06-18._ |
| @@ -3,7 +3,7 @@ | |
| 3 3 | <<"https://github.com/appsignal/appsignal-elixir/blob/main/CHANGELOG.md">>}, |
| 4 4 | {<<"GitHub">>,<<"https://github.com/appsignal/appsignal-elixir">>}]}. |
| 5 5 | {<<"name">>,<<"appsignal">>}. |
| 6 | - {<<"version">>,<<"2.15.9">>}. |
| 6 | + {<<"version">>,<<"2.15.10">>}. |
| 7 7 | {<<"description">>, |
| 8 8 | <<"Collects error and performance data from your Elixir applications and sends it to AppSignal">>}. |
| 9 9 | {<<"elixir">>,<<"~> 1.9">>}. |
| @@ -2,14 +2,58 @@ defmodule Appsignal.Utils.MapFilter do | |
| 2 2 | @moduledoc false |
| 3 3 | require Logger |
| 4 4 | |
| 5 | - # Phoenix parameter filtering copied from to ensure we support the same filtering options: |
| 6 | - # https://github.com/phoenixframework/phoenix/blob/dfb0c00d2077e10f8df6cc6e334e04924c4c2bcd/lib/phoenix/logger.ex#L157-L199 |
| 5 | + # Phoenix parameter filtering adapted from the Phoenix Framework. |
| 6 | + # Copyright (c) 2014 Chris McCord - Licensed under MIT |
| 7 | + # |
| 8 | + # Phoenix < 1.18: https://github.com/phoenixframework/phoenix/blob/dfb0c00d2077e10f8df6cc6e334e04924c4c2bcd/lib/phoenix/logger.ex#L157-L199 |
| 9 | + # Phoenix >= 1.18: https://github.com/phoenixframework/phoenix/blob/8a6baa5e2ddc9cf7a2fc797ac907c40389139122/lib/phoenix/logger.ex#L180-L228 |
| 7 10 | |
| 8 | - def filter(values, params \\ Application.get_env(:phoenix, :filter_parameters, [])) |
| 9 | - def filter(values, {:discard, params}), do: discard_values(values, params) |
| 10 | - def filter(values, {:keep, params}), do: keep_values(values, params) |
| 11 | - def filter(values, params), do: discard_values(values, params) |
| 11 | + def filter(values, filter \\ Application.get_env(:phoenix, :filter_parameters, [])) do |
| 12 | + case filter do |
| 13 | + # Phoenix >= 1.18 |
| 14 | + {:compiled, key_match, value_match} -> |
| 15 | + discard_values(values, key_match, value_match) |
| 12 16 | |
| 17 | + # Phoenix < 1.18 |
| 18 | + {:discard, params} -> |
| 19 | + discard_values(values, params) |
| 20 | + |
| 21 | + {:keep, match} -> |
| 22 | + keep_values(values, match) |
| 23 | + |
| 24 | + # Phoenix < 1.18 |
| 25 | + params -> |
| 26 | + discard_values(values, params) |
| 27 | + end |
| 28 | + end |
| 29 | + |
| 30 | + # Phoenix >= 1.18 |
| 31 | + defp discard_values(%{__struct__: mod} = struct, _key_match, _value_match) when is_atom(mod) do |
| 32 | + struct |
| 33 | + end |
| 34 | + |
| 35 | + defp discard_values(%{} = map, key_match, value_match) do |
| 36 | + Enum.into(map, %{}, fn {k, v} -> |
| 37 | + cond do |
| 38 | + is_binary(k) and String.contains?(k, key_match) -> |
| 39 | + {k, "[FILTERED]"} |
| 40 | + |
| 41 | + is_binary(v) and String.contains?(v, value_match) -> |
| 42 | + {k, "[FILTERED]"} |
| 43 | + |
| 44 | + true -> |
| 45 | + {k, discard_values(v, key_match, value_match)} |
| 46 | + end |
| 47 | + end) |
| 48 | + end |
| 49 | + |
| 50 | + defp discard_values([_ | _] = list, key_match, value_match) do |
| 51 | + Enum.map(list, &discard_values(&1, key_match, value_match)) |
| 52 | + end |
| 53 | + |
| 54 | + defp discard_values(other, _key_match, _value_match), do: other |
| 55 | + |
| 56 | + # Phoenix < 1.18 |
| 13 57 | defp discard_values(%{__struct__: mod} = struct, _params) when is_atom(mod) do |
| 14 58 | struct |
| 15 59 | end |
| @@ -30,21 +74,21 @@ defmodule Appsignal.Utils.MapFilter do | |
| 30 74 | |
| 31 75 | defp discard_values(other, _params), do: other |
| 32 76 | |
| 33 | - defp keep_values(%{__struct__: mod}, _params) when is_atom(mod), do: "[FILTERED]" |
| 77 | + defp keep_values(%{__struct__: mod}, _match) when is_atom(mod), do: "[FILTERED]" |
| 34 78 | |
| 35 | - defp keep_values(%{} = map, params) do |
| 79 | + defp keep_values(%{} = map, match) do |
| 36 80 | Enum.into(map, %{}, fn {k, v} -> |
| 37 | - if is_binary(k) and k in params do |
| 38 | - {k, discard_values(v, [])} |
| 81 | + if is_binary(k) and k in match do |
| 82 | + {k, v} |
| 39 83 | else |
| 40 | - {k, keep_values(v, params)} |
| 84 | + {k, keep_values(v, match)} |
| 41 85 | end |
| 42 86 | end) |
| 43 87 | end |
| 44 88 | |
| 45 | - defp keep_values([_ | _] = list, params) do |
| 46 | - Enum.map(list, &keep_values(&1, params)) |
| 89 | + defp keep_values([_ | _] = list, match) do |
| 90 | + Enum.map(list, &keep_values(&1, match)) |
| 47 91 | end |
| 48 92 | |
| 49 | - defp keep_values(_other, _params), do: "[FILTERED]" |
| 93 | + defp keep_values(_other, _match), do: "[FILTERED]" |
| 50 94 | end |
| @@ -16,7 +16,7 @@ defmodule Appsignal.Mixfile do | |
| 16 16 | use Mix.Project |
| 17 17 | |
| 18 18 | @source_url "https://github.com/appsignal/appsignal-elixir" |
| 19 | - @version "2.15.9" |
| 19 | + @version "2.15.10" |
| 20 20 | |
| 21 21 | def project do |
| 22 22 | [ |