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

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 [