# Configuration

Subtrace tracks all requests by default, but you can exclude certain requests with a simple YAML-based config file. Here’s an example:

```
rules:
  - if: response.status >= 400
    then: include
  - if: request.url == "/health"
    then: exclude
  - if: request.method == "HEAD"
    then: exclude
```

To use a config file, set the `--config` command line flag when starting Subtrace:

```
subtrace run --config=/path/to/subtrace.yaml -- node app.js
```

You can also pass this as an environment variable:

```
export SUBTRACE_CONFIG=/path/to/subtrace.yaml
```

At request time, Subtrace will evaluate all rules in order until a matching rule is found. Using the first matching rule’s `then` field, Subtrace decides whether the request should be included or excluded. If no matching rule is found, the request is included by default.

## Syntax

The `if` condition is written using [CEL](https://cel.dev/), a simple language with a syntax similar to JavaScript. Here’s a list of commonly used syntax as reference examples:

- `request.method == "POST"`
- `request.url != "/robots.txt"`
- `request.url.contains("dashboard")`
- `request.url.startsWith("/api/")`
- `request.url.endsWith(".jpg") || request.url.endsWith(".png")`
- `response.status >= 400 && response.status <= 499`

You can find the complete CEL language definition [here](https://github.com/google/cel-spec/blob/master/doc/langdef.md).
