> ## 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.

# Aangepaste instrumentatie voor PHP

Het AppSignal voor PHP-pakket biedt out-of-the-box instrumentaties voor uw PHP-applicatie. Soms hebt u echter fijnmazige observability nodig, waarvoor handmatige instrumentatie vereist is. Gebruik in dat geval de methode `Appsignal::instrument` en pas de gegevens die naar AppSignal worden gestuurd aan met behulp van de helper-methoden.

<Warning>
  Gegevens die naar AppSignal worden gestuurd, mogen geen persoonsgegevens
  bevatten, zoals namen of e-mailadressen. Saneer de gegevens van uw applicatie
  voordat u ze naar AppSignal stuurt. Als u een persoon moet identificeren, gebruik
  dan alternatieven zoals een gebruikers-ID, hash of pseudoniem.
</Warning>

## Spans aanmaken

De `Appsignal`-klasse biedt een helper voor het aanmaken van spans.

### `instrument`

Maakt een nieuwe span aan en activeert deze. Geef een closure mee om de span automatisch te laten sluiten, of laat deze weg om de levenscyclus van de span handmatig te beheren.

#### Met een closure

Als u een closure gebruikt, sluit AppSignal de actieve span automatisch.

```php PHP theme={null}
Appsignal::instrument(
	name: 'process-order',
	attributes: ['order_id' => $orderId],
	closure: function () {
		// do work here
		Appsignal::setAttributes(['order_status' => 'processed']);
	},
);
```

#### Zonder closure

Zonder een closure retourneert de methode `instrument` een instantie van de klasse `ActiveSpan`, een dunne wrapper rondom de OpenTelemetry-span en zijn scope. Sluit deze span handmatig door `$span->end()` aan te roepen.

```php PHP theme={null}
$activeSpan = Appsignal::instrument(
	name: 'upload-file',
	attributes: ['file_name' => $filename],
);

try {
    uploadFile($file);
} catch (Throwable $e) {
    Appsignal::setError($e);
} finally {
    $activeSpan->end();
}
```

## Helpers

De basisklasse `Appsignal` biedt helper-methoden om aangepaste gegevens toe te voegen aan traces of spans. In de volgende secties wordt elke helper beschreven.

<Note>
  De onderstaande codevoorbeelden gaan ervan uit dat uw code al wordt geïnstrumenteerd
  (bijvoorbeeld binnen een Laravel- of Symfony-routehandler). Als uw code nog niet
  wordt geïnstrumenteerd, moet u een root-span aanmaken door `Appsignal::instrument()`
  aan te roepen en de helpers daarbinnen te gebruiken.
</Note>

### `addAttributes`

Voeg attributen toe aan de huidige span.

```php PHP theme={null}
Appsignal::addAttributes([
    'user_id'   => $user->id,
    'user_plan' => $user->plan,
]);
```

### `addHeaders`

Voegt request headers toe aan de huidige span. Als de headernaam al bestaat, wordt de waarde overschreven. Request headers worden in AppSignal getoond voor gesamplede traces. Zie [de handleiding voor het aanpassen van request headers](/guides/custom-data/request-headers) voor meer informatie.

```php PHP theme={null}
Appsignal::addHeaders(['custom-header' => 'some-value']);
```

### `addTags`

Voeg tags toe aan de huidige span. Tags verschijnen als filterbare metadata in AppSignal en krijgen intern het voorvoegsel `appsignal.tag.`.

```php PHP theme={null}
Appsignal::addTags([
    'locale'  => 'en',
    'version' => '2.1.0',
]);
```

Zie de [handleiding voor tagging](/guides/tagging) voor meer informatie over hoe tags werken in AppSignal.

### `setAction`

Stelt de actienaam in op de huidige span. AppSignal toont dit als de transactienaam en gebruikt het om samples te groeperen.

```php PHP theme={null}
Appsignal::setAction('OrdersController::create');
```

### `setNamespace`

Stelt de namespace in van de root-span.

```php PHP theme={null}
Appsignal::setNamespace('admin');
```

### `setParams`

Stelt de queryparameters in van de inkomende request. De `$params` moeten een waarde zijn die [als JSON kan worden geserialiseerd](https://www.php.net/manual/en/function.json-encode.php).

```php PHP theme={null}
$params = [
    'param1' => 'value1',
    'param2' => 'value2',
    'nested' => [
        'param3' => 'value3',
        'param4' => 'value4',
    ],
];

Appsignal::setParams($params);
```

### `setPayload`

Stelt de payload in van de inkomende request. De `$payload` moet een waarde zijn die [als JSON kan worden geserialiseerd](https://www.php.net/manual/en/function.json-encode.php).

```php PHP theme={null}
$payload = [
    'key1' => 'value1',
    'key2' => 'value2',
    'nested' => [
        'key3' => 'value3',
        'key4' => 'value4',
    ],
];

Appsignal::setPayload($payload);
```

## `ActiveSpan`

`Appsignal::instrument()` retourneert een `ActiveSpan`-instantie die alle standaard OpenTelemetry API `SpanInterface`-[methoden](https://open-telemetry.github.io/opentelemetry-php/classes/OpenTelemetry-API-Trace-SpanInterface.html) proxy't. Als u low-level controle over de span nodig hebt, gebruik dan deze methoden om er rechtstreeks gegevens of events aan te koppelen.

```php PHP theme={null}
$activeSpan = Appsignal::instrument('render-report');
$activeSpan->setAttribute('report.type', 'pdf');
$activeSpan->addEvent('rendering-started');

someExpensiveMethod();

$activeSpan->end();
```
