EctoTrailer

CI Hex.pm Docs Total Download License

EctoTrailer allows to store changeset changes into a separate audit_log table.

Installation and usage

  1. Add ecto_trailer to your list of dependencies in mix.exs:
def deps do
  [{:ecto_trailer, "~> 1.0"}]
end
  1. Add a migration that creates audit_log table to priv/repo/migrations folder:
defmodule EctoTrailer.TestRepo.Migrations.CreateAuditLogTable do
  @moduledoc false
  use Ecto.Migration

  @table_name String.to_atom(Application.compile_env(:ecto_trailer, :table_name, "audit_log"))

  def change(table_name \\ @table_name) do
    EctoTrailChangeEnum.create_type
    create table(table_name) do
      add :actor_id, :string, null: false
      add :resource, :string, null: false
      add :resource_id, :string, null: false
      add :changeset, :map, null: false
      add(:change_type, :change)

      timestamps([type: :utc_datetime, updated_at: false])
    end
  end
end
  1. Use EctoTrailer in your repo:
defmodule MyApp.Repo do
  use Ecto.Repo, otp_app: :my_app
  use EctoTrailer
end
  1. Configure table name which is used to store audit log (in config.ex):
config :ecto_trailer, table_name: "audit_log", redacted_fields: [:password, :token]
  1. Use logging functions instead of defaults. See EctoTrailer module docs.

Docs

The docs can be found at https://hexdocs.pm/ecto_trailer.