# Tracer

`import { Tracer } from "destack:telemetry";`

Trace span starter.

```ds title="Tracer"
export class Tracer {
    constructor(sink?: readonly TraceSink | undefined);
    start(name: &'b readonly string, options?: SpanOptions | undefined): Span;
    span<T>(name: &'b readonly string, body: (Span) => T, options?: SpanOptions | undefined): T;
    spanAsync<T: Copy>(name: &'b readonly string, body: (Span) => Promise<T>, options?: SpanOptions | undefined): Promise<T>;
    async spanTask<T>(name: &'b readonly string, body: (Span) => Task<T>, options?: SpanOptions | undefined): Task<T>;
}
```

[language/library/src/telemetry/trace.ds:124:178](https://github.com/destack-sh/destack/blob/main/language/library/src/telemetry/trace.ds#L124-L178)

## Members

### `constructor(sink?: readonly TraceSink | undefined)`

Create a tracer.

### `start(name: &'b readonly string, options?: SpanOptions | undefined): Span`

Start one span.

### `span<T>(name: &'b readonly string, body: (Span) => T, options?: SpanOptions | undefined): T`

Run `body` inside one span.

### `spanAsync<T: Copy>(name: &'b readonly string, body: (Span) => Promise<T>, options?: SpanOptions | undefined): Promise<T>`

Run async `body` inside one span.

### `async spanTask<T>(name: &'b readonly string, body: (Span) => Task<T>, options?: SpanOptions | undefined): Task<T>`

Run task `body` inside one span.
