From 785ea1cd5c8db746e342cd8f8f534261320075ca Mon Sep 17 00:00:00 2001 From: Joshua Wood Date: Thu, 19 Dec 2024 13:38:11 -0800 Subject: [PATCH] fix: support Elixir 1.17 (#575) * Test Elixir 1.14-1.17 https://hexdocs.pm/elixir/1.17.3/compatibility-and-deprecations.html * Support Elixir 1.17 logger error messages Elixir 1.17 made some changes to error logging that affected the pattern matching in our `gen_event` handler. This supports the new and the old events when extracting details for the error context. Related: https://github.com/elixir-lang/elixir/releases/tag/v1.7.0 https://www.infoq.com/news/2018/08/elixir-1.7-improvements/ https://www.erlang.org/doc/apps/stdlib/gen_event.html https://hexdocs.pm/logger/Logger.html * Update .github/workflows/elixir.yml --------- Co-authored-by: Parker Selbert --- .github/workflows/elixir.yml | 7 +++++-- lib/honeybadger/logger.ex | 12 ++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/.github/workflows/elixir.yml b/.github/workflows/elixir.yml index 731c430e..a343bb6c 100644 --- a/.github/workflows/elixir.yml +++ b/.github/workflows/elixir.yml @@ -18,11 +18,14 @@ jobs: matrix: include: - pair: - elixir: '1.11' - otp: '21.3' + elixir: '1.14' + otp: '23.3' - pair: elixir: '1.15' otp: '26.0' + - pair: + elixir: '1.17' + otp: '27.0' lint: lint runs-on: ubuntu-20.04 diff --git a/lib/honeybadger/logger.ex b/lib/honeybadger/logger.ex index bee6c3a2..b40af45d 100644 --- a/lib/honeybadger/logger.ex +++ b/lib/honeybadger/logger.ex @@ -93,14 +93,26 @@ defmodule Honeybadger.Logger do |> Map.new() end + # Elixir < 1.17 defp extract_details([["GenServer ", _pid, _res, _stack, _last, _, _, last], _, state]) do %{last_message: last, state: state} end + # Elixir < 1.17 defp extract_details([[":gen_event handler ", name, _, _, _, _stack, _last, last], _, state]) do %{name: name, last_message: last, state: state} end + # Elixir >= 1.17 + defp extract_details([["GenServer ", _pid, _res, _stack, _last, _, _, _, last], _, state]) do + %{last_message: last, state: state} + end + + # Elixir >= 1.17 + defp extract_details([[":gen_event handler ", name, _, _, _, _stack, _, _last, last], _, state]) do + %{name: name, last_message: last, state: state} + end + defp extract_details(["Process ", pid | _]) do %{name: pid} end