> ## Documentation Index
> Fetch the complete documentation index at: https://docs.appsignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# AppSignal integreren in Plug

<Tip>
  **Opmerking**: Ondersteuning voor aangepaste namespaces is toegevoegd in versie 1.3.0 van
  het AppSignal voor Elixir-pakket.
</Tip>

Het AppSignal voor Elixir-pakket integreert met Plug. Om de integratie op te
zetten, volg onze [installatiehandleiding](/elixir/installation).

Deze pagina beschrijft hoe u AppSignal in een Plug-applicatie opzet en hoe u
instrumentatie voor events binnen requests toevoegt. Lees voor meer informatie over
aangepaste instrumentatie de [Elixir-
instrumentatie](/elixir/instrumentation)-documentatie.

Meer informatie vindt u in de [AppSignal Hex-pakketdocumentatie][hex-appsignal].

## Installatie

De AppSignal-instrumentatie voor Plug is onderdeel van een apart pakket, dat afhankelijk is van het primaire `appsignal`-pakket. Voeg het pakket `appsignal_plug` toe aan uw `mix.exs`-bestand.

<CodeGroup>
  ```elixir Elixir theme={null}
  # mix.exs
  defmodule AppsignalPlugExample.MixProject do
    # ...

    defp deps do
      [
        {:plug, "~> 1.0"}, # Or plug_cowboy ~> 2.0
        {:appsignal_plug, "~> 2.0"}
        # ...
      ]
    end
  end
  ```
</CodeGroup>

Als u ons `appsignal_phoenix`-pakket al gebruikt, hoeft u het pakket `appsignal_plug` niet toe te voegen, aangezien dit al een afhankelijkheid is van het pakket `appsignal_phoenix`. Zie ook onze [Phoenix-integratiehandleiding](/elixir/installation/umbrella#phoenix).

## Inkomende HTTP-requests

We beginnen met een kleine Plug-app die `GET`-requests naar `/` accepteert en
een welkomstbericht retourneert. Om HTTP-requests in deze app te beginnen loggen, gebruiken we
de module `Appsignal.Plug`.

<CodeGroup>
  ```elixir Elixir theme={null}
  defmodule AppsignalPlugExample do
    use Plug.Router
    use Appsignal.Plug # <- Add this

    plug :match
    plug :dispatch

    get "/" do
      send_resp(conn, 200, "Welcome")
    end
  end
  ```
</CodeGroup>

Dit maakt een transactie aan voor elke HTTP-request die op het endpoint
wordt uitgevoerd.

## Aangepaste instrumentatie

Hoewel `Appsignal.Plug` transacties voor u start, instrumenteert het voorlopig nog geen
events in uw app. Om dat te doen, moeten we wat aangepaste
instrumentatie toevoegen.

Deze voorbeeld-app lijkt op die we eerder hebben gebruikt, maar deze heeft een trage functie
(toepasselijk `slow/0` genaamd) waarvoor we instrumentatie willen toevoegen. Om dat te doen, moeten we
de helper `Appsignal.instrument/2-3` in onze aangeroepen functie gebruiken:

<CodeGroup>
  ```elixir Elixir theme={null}
  defmodule AppsignalPlugExample do
    use Plug.Router

    plug :match
    plug :dispatch

    get "/" do
      slow()
      send_resp(conn, 200, "Welcome")
    end

    defp slow do
      Appsignal.instrument("slow", fn ->
        :timer.sleep(1000)
      end)
    end

    use Appsignal.Plug
  end
  ```
</CodeGroup>

Dit voegt een event voor de `slow/0`-functie toe aan de huidige transactie,
telkens wanneer deze wordt aangeroepen. Lees voor meer informatie over aangepaste instrumentatie
de [Elixir-instrumentatie](/elixir/instrumentation)-documentatie.

## Instrumentatie voor opgenomen Plugs

Uitzonderingen in opgenomen Plugs worden automatisch opgevangen door AppSignal, maar
performance samples moeten handmatig worden opgezet met behulp van de aangepaste instrumentatie-
helpers of decorators.

### Plug-instrumentatie met decorators

Om instrumentatie toe te voegen aan Plugs, gebruikt u de functie `Appsignal.instrument/2`:

<CodeGroup>
  ```elixir Elixir theme={null}
  defmodule SlowPlugWithDecorators do
    import Plug.Conn

    def init(opts), do: opts

    def call(conn, _) do
      Appsignal.instrument("SlowPlugWithDecorators", fn ->
        :timer.sleep(1000)
        conn
      end)
    end
  end
  ```
</CodeGroup>

[hex-appsignal]: https://hexdocs.pm/appsignal/
