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

# Logs opvragen

Doorzoek logregels met de [Public API (V2)](/api/v2/overview). Dit is de manier om
logs programmatisch op te vragen, inclusief gestructureerde (JSON) loggegevens. De GraphQL
API stelt geen logregels beschikbaar.

<Tip>
  Bent u een AI-agent of -assistent aan het bouwen, dan stelt [AppSignal MCP](/mcp-server)
  logzoekopdrachten en andere monitoringgegevens rechtstreeks beschikbaar voor agents, zonder
  dat u deze API zelf hoeft aan te roepen.
</Tip>

## Uw site- en bron-ID's vinden

Een logzoekopdracht heeft een `site_id` en een of meer `source_ids` nodig. Beide verschijnen in de
URL van een log source in AppSignal. Open een log source en lees ze uit het pad:

<CodeGroup>
  ```text URL theme={null}
  https://appsignal.com/<organization>/sites/<SITE_ID>/logs/sources/<SOURCE_ID>
  ```
</CodeGroup>

## Logregels doorzoeken

<CodeGroup>
  ```shell Endpoint theme={null}
  POST /api/v2/logs/lines
  ```
</CodeGroup>

### Request body

| Veld              | Type              | Vereist | Beschrijving                                                               |
| ----------------- | ----------------- | ------- | -------------------------------------------------------------------------- |
| `site_id`         | string            | Ja      | Site om op te vragen.                                                      |
| `source_ids`      | string\[]         | Ja      | Log source-ID's om te doorzoeken. Ten minste één is vereist.               |
| `query`           | string            | Ja      | Querystring die logregels filtert. Zie [querytaal](#query-language).       |
| `use_expressions` | boolean           | Nee     | Als `true`, parse `query` met de expressie-gebaseerde querytaal.           |
| `from`            | string (ISO 8601) | Nee     | Startpunt van het tijdsbereik. Standaard is de ondergrens van de retentie. |
| `to`              | string (ISO 8601) | Nee     | Eindpunt van het tijdsbereik. Standaard is de huidige tijd.                |
| `pagination`      | object            | Ja      | Paginatie-cursor en -richting (zie de volgende sectie).                    |

Stel `use_expressions` in op `true` om de expressie-gebaseerde querytaal te gebruiken
die op deze pagina wordt gedocumenteerd.

`pagination` neemt `per_page` (number), `order` (`ASC` of `DESC`) en een `cursor`
met een `time`-veld (een ISO 8601-tijdstempel, of `null` voor de eerste pagina). Om
de volgende pagina op te halen, verzendt u de tijdstempel van de laatste regel die u ontving als de
`cursor.time` van het volgende verzoek.

### Voorbeeld van een verzoek

<CodeGroup>
  ```shell cURL theme={null}
  curl --request POST \
    --url "https://appsignal.com/api/v2/logs/lines" \
    --header "Authorization: Bearer YOUR-PERSONAL-API-TOKEN" \
    --header "Content-Type: application/json" \
    --data @body.json
  ```
</CodeGroup>

<CodeGroup>
  ```json body.json theme={null}
  {
    "site_id": "YOUR-SITE-ID",
    "source_ids": ["YOUR-LOG-SOURCE-ID"],
    "query": "severity=error status_code=401",
    "use_expressions": true,
    "from": "2026-06-22T00:00:00Z",
    "to": "2026-06-22T23:59:59Z",
    "pagination": {
      "per_page": 100,
      "order": "DESC",
      "cursor": { "time": null }
    }
  }
  ```
</CodeGroup>

### Response

Het eindpunt retourneert een array van logregels. Elke regel bevat deze velden:

| Veld         | Type              | Beschrijving                                                                                      |
| ------------ | ----------------- | ------------------------------------------------------------------------------------------------- |
| `id`         | string            | Logregel-identificator.                                                                           |
| `timestamp`  | string (ISO 8601) | Wanneer de logregel is vastgelegd.                                                                |
| `source_id`  | string            | Log source waar de regel bij hoort.                                                               |
| `severity`   | string            | Severityniveau, zoals `info` of `error`.                                                          |
| `message`    | string            | De body van het logbericht.                                                                       |
| `hostname`   | string            | Host die de regel heeft geproduceerd.                                                             |
| `group`      | string            | Loggroep.                                                                                         |
| `json`       | string            | De ruwe gestructureerde (JSON) body van de logregel, indien beschikbaar.                          |
| `attributes` | object            | Verouderde getypeerde sleutel-waardeattributen. Wordt uitgefaseerd — geef de voorkeur aan `json`. |

<Note>
  Gestructureerde velden zoals `status_code`, `path` of `detail` zitten in het `json`-
  veld, niet in `attributes`. Vraag ze op via hun exacte sleutel zoals deze in uw
  log-JSON voorkomt (bijvoorbeeld `status_code=401` of `detail.message:"required"`).
</Note>

## Querytaal

Wanneer `use_expressions` `true` is, ondersteunt de `query`-string booleaanse logica over
velden van logregels en de gestructureerde `json`-body.

### Operatoren

| Operator | Naam                  | Gedrag                       |
| -------- | --------------------- | ---------------------------- |
| `=`      | Gelijk aan            | Exacte overeenkomst.         |
| `!=`     | Niet gelijk aan       | Exacte niet-overeenkomst.    |
| `:`      | Bevat                 | Substring-overeenkomst.      |
| `!:`     | Bevat niet            | Substring-niet-overeenkomst. |
| `>`      | Groter dan            | Numerieke vergelijking.      |
| `>=`     | Groter dan of gelijk  | Numerieke vergelijking.      |
| `<`      | Kleiner dan           | Numerieke vergelijking.      |
| `<=`     | Kleiner dan of gelijk | Numerieke vergelijking.      |

String-operatoren (`=`, `!=`, `:`, `!:`) vergelijken beide kanten als strings. Numerieke
operatoren (`>`, `>=`, `<`, `<=`) casten beide kanten naar een getal; als een waarde niet
als getal kan worden geparsed, wordt die logregel overgeslagen.

### Expressies combineren

* **AND / OR:** `severity=error AND hostname:web`, of `severity=info OR severity=warn`.
* **Impliciete AND:** een spatie tussen expressies betekent AND. `severity=error hostname:web` is hetzelfde als `severity=error AND hostname:web`.
* **Nesten met haakjes:** `message:"API request" AND (severity=info OR severity=warn)`.
* **Voorrang:** AND bindt sterker dan OR.

Elke operator kan binnen een `OR`-groep worden gebruikt, niet alleen gelijkheid — bijvoorbeeld
`message:"API request" AND (user.id>1000 OR user.email:"example.com")`.

### Velden

Gegeven een logregel met deze JSON-body:

<CodeGroup>
  ```json Example log theme={null}
  {
    "message": "API request completed",
    "severity": "info",
    "duration": 156.7,
    "status_code": 200,
    "user": {
      "id": 12345,
      "roles": ["admin", "developer"],
      "location.country": "US"
    }
  }
  ```
</CodeGroup>

* **Basisvelden:** `message`, `severity`, `hostname` en `group` matchen de top-level velden van de logregel.
* **Geneste JSON:** gebruik puntnotatie om in de `json`-body te reiken, zoals `status_code=200` of `user.id=12345`.
* **JSON-arrays:** indexeer array-elementen, zoals `user.roles.0=admin`.
* **Geëscapete punten:** om een letterlijke punt in een sleutelnaam te matchen, escape hem. `user.location\.country=US` matcht de sleutel `location.country` binnen `user`, in plaats van een genest `country`-object.
* **Standaardveld:** een losse term zonder veld matcht `message` met de `bevat`-operator. `timeout` is hetzelfde als `message:timeout`.

U hoeft `attributes.` niet voor een veld te zetten of er een typesuffix achter te plakken om een veld op te vragen
— verwijs er direct naar op naam. Zie [verouderde query-
syntax](#legacy-query-syntax) als u oudere queries heeft.

### Waarden tussen aanhalingstekens

Plaats waarden die spaties of haakjes bevatten tussen dubbele aanhalingstekens. Anders splitst de
spatie de waarde in afzonderlijke expressies die met impliciete AND worden verbonden.

```text theme={null}
message:"hello world"           matches message containing "hello world"
message:hello world             parsed as message:hello AND message:world
severity=error message:"oh no"  severity equals error AND message contains "oh no"
```

Alleen dubbele aanhalingstekens worden herkend. Escape binnen een waarde tussen aanhalingstekens een aanhalingsteken met
`\"` en een backslash met `\\`. Bijvoorbeeld, `message:"value with \"quotes\""`
matcht de tekst `value with "quotes"`.

### Verouderde queryssyntax

Oudere queries sloegen attributen op als getypeerde velden, dus moesten ze
`attributes.` voorvoegen, een typesuffix toevoegen (`_string`, `_int`) en een `[ ]`-lijst gebruiken voor
meerdere waarden. De huidige querytaal verwijdert alle drie — verwijs direct naar velden
en gebruik `OR` in plaats van een lijst:

<CodeGroup>
  ```text Old query theme={null}
  message:"API request" attributes.user_id_int=12345 severity=[info, warn]
  ```

  ```text New query theme={null}
  message:"API request" user.id=12345 (severity=info OR severity=warn)
  ```
</CodeGroup>

Een query die nog steeds de verouderde syntax gebruikt, retourneert een `422` met de
`legacy_log_query_syntax`-foutslug.
