---
title: "Logs"
subtitle: "Search, filter and export every span, trace and thread your app sends to Respan."
---

**Logs** lists every span your app sends to Respan, newest first. Open it from **Observability** › **Logs** or **Gateway** › **Logs**. Click a row to open it in a side panel. See [Inspect spans and traces](/docs/documentation/features/observe/view-debug-traces).

<img src={"/docs/images/logs/logs-overview-light.webp"} className="block dark:hidden" alt="Logs with saved view tabs, the search field, the filter row, the signals panel and the span table" />
<img src={"/docs/images/logs/logs-overview-dark.webp"} className="hidden dark:block" alt="Logs with saved view tabs, the search field, the filter row, the signals panel and the span table" />

A red bar on a row's left edge marks an error. An orange bar marks a warning, or a span where an issue behavior fired.

## Search messages

Type words from a prompt or a reply into **Search for spans...** and press Enter. Logs keeps the spans whose messages match. Clear the field to drop the search.

The field follows the grouping, so it reads **Search for traces...** or **Search for threads...** there.

<Note>
Message search needs the Team plan. On the Free plan, the field reads **Search messages on the Team plan**. Click **Upgrade to Team** to upgrade.
</Note>

## Filter logs

<Steps>
<Step title="Pick the environment">

Click **All** and pick **Production** (data sent with production API keys) or **Test** (data sent with test API keys or from the Playground).

</Step>
<Step title="Use the quick filters">

Click **Status**, **Behavior**, **API key**, **Provider** or **Model** and check the values you want. **Behavior** keeps spans where an **Issue**, **Win** or **Info** behavior fired.

</Step>
<Step title="Filter on any other field">

Click **More filters** and pick a field, such as **Status code**, **Cost** or **Customer ID**. Then set its value. Each condition shows as a chip, and the filter icon after the chips adds the next one. Click a chip's value to change it, or its × to remove it.

<img src={"/docs/images/logs/filter-menu-light.webp"} className="block dark:hidden" alt="The More filters menu open under the filter row, with Add filter group and fields such as Status code, Cost and Customer ID" />
<img src={"/docs/images/logs/filter-menu-dark.webp"} className="hidden dark:block" alt="The More filters menu open under the filter row, with Add filter group and fields such as Status code, Cost and Customer ID" />

</Step>
<Step title="Set the time range">

In the panel above the table, pick **5m**, **1h**, **1d**, **7d** or **Custom**. You can also drag across the chart to zoom in, then click **Reset zoom** to go back.

</Step>
</Steps>

How far back you can look depends on your plan. If you pick an older range, Logs shortens it to your limit.

| Plan | Time range |
|---|---|
| Free | Last 7 days |
| Team | Last 30 days |
| Custom | No limit |

### Filter by custom properties

Click **Custom property**, find a property your app sends in its metadata (**Search properties...**), and pick a value. The property shows as a chip. To send custom properties, see [Custom IDs & attributes](/docs/documentation/features/observe/custom-ids).

### Combine conditions

Chips join with **AND**. Click the **AND** between two chips to switch it to **OR**.

To mix both, open the filter menu, click **Add filter group** and add conditions to the group. A group joins its own conditions with **OR** (click to switch), and joins your other filters with **AND**. For example, a **Customer ID** chip plus a group of **Cost** and **Output tokens** shows that customer's spans that were either expensive or long.

In **Threads**, chips that mix thread totals, such as **Thread total cost**, with span fields, such as **Customer ID**, can only join with **AND**. A note under the filters says so.

## Group by spans, traces or threads

Click the grouping control in the filter row (it reads **Spans** by default) and pick what each row is.

<img src={"/docs/images/logs/grouping-menu-light.webp"} width="470" className="block dark:hidden" alt="The grouping control open with Spans, Traces and Threads" />
<img src={"/docs/images/logs/grouping-menu-dark.webp"} width="470" className="hidden dark:block" alt="The grouping control open with Spans, Traces and Threads" />

| Grouping | Each row is |
|---|---|
| **Spans** | One operation, such as an LLM call, tool call or task. The default. |
| **Traces** | One end-to-end run, with every span inside it. |
| **Threads** | One conversation: the spans that share a `thread_identifier`. See [Custom IDs & attributes](/docs/documentation/features/observe/custom-ids). |

In **Traces** and **Threads**, a timeline of traces or threads replaces the signals panel. The old Traces and Threads pages now open Logs.

Some filters don't work in every grouping. If one of them is on, Logs asks **Remove filters before changing grouping?**. Click **Remove and continue** to drop them and switch.

## Customize columns

Click the gear icon (**Column options**) at the top right, or press **D**. Click the eye next to a column to show or hide it, and drag columns to reorder them. Custom properties and scores, when you have them, get their own sections.

After a change, click **Save** in the panel to keep it in the open view (on **All logs**, this starts a new view), or **Reset to default** to undo it.

Click a column header to sort by it, and click it again to reverse the order. Drag a header to move its column.

## Save views

A view keeps its search, filters, environment, grouping, columns and time range. Views show as tabs at the top of Logs, and under **Logs** in the left sidebar.

<Steps>
<Step title="Set up the view">

Apply the search and filters you want. **Reset** and **Save** appear in the filter row.

<img src={"/docs/images/logs/save-view-light.webp"} className="block dark:hidden" alt="A Customer ID filter on All logs, followed by Share, Reset and Save" />
<img src={"/docs/images/logs/save-view-dark.webp"} className="hidden dark:block" alt="A Customer ID filter on All logs, followed by Share, Reset and Save" />

</Step>
<Step title="Save it">

On **All logs**, click **Save**. Logs adds a tab named **New view**. On a saved view, **Save** offers **Save to this view** or **Save as new view**.

</Step>
<Step title="Name it">

Hover the tab and click the pencil (**Rename**).

</Step>
</Steps>

Right-click a view tab for **Copy view URL**, **Duplicate view**, **Edit view** and **Delete view**. The icon after the last tab (**New view**) starts an empty view.

When every filter is an ID, such as **Customer ID**, **Thread ID**, **Custom ID**, **Log ID** or **Trace ID**, **Share** copies a link that opens Logs with the same filters, time range, grouping and environment.

## Export logs

<Steps>
<Step title="Open the export form">

Click the export icon at the top right (**Export logs**) or press **E**, then click **One-time export**.

</Step>
<Step title="Choose what to export">

Set the filters, time range, **Sampling %**, an optional **Export name**, the **Columns** and the **File type** (**CSV** or **JSONL**). The form shows how many spans match.

<img src={"/docs/images/logs/export-form-light.webp"} width="320" className="block dark:hidden" alt="The Export logs form with Filters, Time range, Sampling %, Export name, Columns, File type and Download CSV" />
<img src={"/docs/images/logs/export-form-dark.webp"} width="320" className="hidden dark:block" alt="The Export logs form with Filters, Time range, Sampling %, Export name, Columns, File type and Download CSV" />

</Step>
<Step title="Start the export">

Click **Download CSV** or **Download JSONL**. When the file is ready, download it from **Settings** › **Exports**.

</Step>
</Steps>

- **Recurring export** exports the matching spans every 15 minutes.
- To export only some spans, check their rows, then click the export button in the bar at the bottom of the table.
- In **Traces**, the export icon (**Export traces**) exports traces. **Threads** has no export.

For export jobs, see [Export](/docs/documentation/features/observe/export-retention). For how long logs are kept, see [Data retention](/docs/documentation/admin/projects#data-retention).

## Blurred spans on the Free plan

On the Free plan, you can view the first 100,000 spans each calendar month. Respan still records every span after that, but Logs blurs their span name, model and messages, and exports stop at that point. Hover a blurred cell to see why, or click the row to open the plans page. Upgrading to Team shows them again.

<img src={"/docs/images/logs/blurred-spans-light.webp"} className="block dark:hidden" alt="The newest spans blurred in the table, with the Span content hidden tooltip" />
<img src={"/docs/images/logs/blurred-spans-dark.webp"} className="hidden dark:block" alt="The newest spans blurred in the table, with the Span content hidden tooltip" />

## Signals above the table

In the **Spans** grouping, the panel between the filters and the table counts spans, errors, **Issues**, **Wins** and **Info** over the time range. Click a row to open it, or a cell to see its spans. See [Signals and errors](/docs/documentation/features/pulse/errors).

To track a new pattern, click **New custom behavior** at the top right. See [Behaviors](/docs/documentation/features/pulse/behaviors).
