Get started ​
Use @anvia/logger when agent lifecycle events should enter the same structured logs as the rest of your server.
Install ​
bash
pnpm add @anvia/core @anvia/loggerAttach an observer ​
ts
import { Agent } from '@anvia/core'
import { createLoggerObserver, createPinoLogger } from '@anvia/logger'
const logger = createPinoLogger({
name: 'support-api',
level: 'info',
bindings: { environment: process.env.NODE_ENV },
})
const agent = new Agent({
id: 'support',
model: model,
observability: {
observers: { logger: createLoggerObserver({ logger }) },
},
})
const result = await agent.generate({
prompt: 'Where is order A123?'
})
if (result.type === 'interaction') {
logger.info('Agent paused for interaction', { interaction: result.interaction })
}The observer creates child loggers for the run and each tool call. Stable trace, session, user, agent, turn, and tool fields can therefore be searched without parsing the message text.
For local development, replace createPinoLogger with createConsoleLogger. Both implement the same Logger contract.
Choose what to capture ​
Full payload capture is off by default; the run-end record always includes the final assistant text:
ts
const observer = createLoggerObserver({
logger,
includeRequest: false,
includeResponse: false,
includeOutput: false,
includeToolResult: false,
})Enable a flag only after deciding whether prompts, tool data, model responses, typed output, or personal information may enter your logging system.