lib/logger_sentry/fingerprint/code_location.ex

defmodule LoggerSentry.Fingerprint.CodeLocation do
  @moduledoc """
  Default fingerprints from code location.
  """

  def fingerprints(metadata, _msg) do
    file = Keyword.get(metadata, :file)
    line = Keyword.get(metadata, :line)

    if file && line do
      %{
        application: Keyword.get(metadata, :application),
        module: Keyword.get(metadata, :module),
        function: Keyword.get(metadata, :function),
        file: file,
        line: line
      }
      |> Enum.reject(fn {_, v} -> is_nil(v) end)
      |> Enum.map(fn {k, v} ->
        "#{k}:#{v}"
      end)
    else
      case Keyword.get(metadata, :crash_reason) do
        {err, stacktrace} -> ["error:#{Exception.format(:error, err, stacktrace)}"]
        _ -> []
      end
    end
  rescue
    _ ->
      []
  end

  # __end_of_module__
end