> ## Documentation Index
> Fetch the complete documentation index at: https://logixlysia-claude-elysia-v2-open-beta-i2faib.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Migrating from evlog

> Map evlog wide events to Logixlysia request context and access logs

## Plugin setup

**evlog**

```ts theme={null}
import { evlog } from 'evlog/elysia'

new Elysia().use(evlog({ drain: myDrain }))
```

**Logixlysia**

```ts theme={null}
import logixlysia from 'logixlysia'

new Elysia().use(logixlysia({ preset: 'prod' }))
```

## Context accumulation

| evlog                              | Logixlysia                                                    |
| ---------------------------------- | ------------------------------------------------------------- |
| `log.set({ userId: 'x' })`         | `store.logger.mergeContext(request, { userId: 'x' })`         |
| `log.set({ cart: { total: 99 } })` | `store.logger.mergeContext(request, { cart: { total: 99 } })` |
| `useLogger()`                      | `store.logger` in handlers                                    |

## Emitting the request log

evlog:

```ts theme={null}
log.emit({ status: 200 })
```

Logixlysia emits the access log automatically in `afterHandle`. Use a custom log only when you need to skip the default line:

```ts theme={null}
store.logger.info(request, 'handled manually')
```

## AI metrics

**evlog** — automatic via `evlog/ai`.

**Logixlysia**

```ts theme={null}
import { mergeAIMetrics } from 'logixlysia/ai'

mergeAIMetrics(store.logger, request, {
  model: 'claude-sonnet',
  inputTokens: 100,
  outputTokens: 50,
  totalTokens: 150
})
```

## Tracing

Use `injectTraceContext` from `logixlysia/otel` in the `request` hook (see [OpenTelemetry](/docs/integrations/otel)).

## Drains vs transports

evlog **drains** map to Logixlysia **transports**:

```ts theme={null}
logixlysia({
  config: {
    transports: [
      {
        log: (level, message, meta) => {
          myDrain.write({ level, message, ...meta })
        }
      }
    ],
    useTransportsOnly: true
  }
})
```
