logging

Úsalo al agregar registros, depurar o trabajar con el Logger en el SDK y el tiempo de ejecución del contenedor. Cubre el patrón de inyección por constructor, registros secundarios,…

npx skills add https://github.com/cloudflare/sandbox-sdk --skill logging

Logging

Pattern: Explicit Constructor Injection

Loggers are passed explicitly via constructor injection throughout the codebase. There is no global/ambient logger.

import type { Logger } from '@repo/shared';

class MyService {
  constructor(private logger: Logger) {}

  async doWork(context: WorkContext) {
    const childLogger = this.logger.child({ operation: 'work' });
    childLogger.info('Working', { context });
  }
}

Child loggers

Use logger.child({ ... }) to attach structured context that will appear on every log line from that child. Prefer child loggers at the boundary of a unit of work (request, operation, session) rather than re-passing context on every call.

Configuration

Two environment variables, both read once at startup:

VarValuesPurpose
SANDBOX_LOG_LEVELdebug | info | warn | errorMinimum level emitted
SANDBOX_LOG_FORMATjson | prettyOutput format

Use json in production (machine-parseable) and pretty for local dev.

In Tests

Use createNoOpLogger() from @repo/shared to silence logging in tests:

import { createNoOpLogger } from '@repo/shared';

const service = new MyService(createNoOpLogger());

Don't construct real loggers in unit tests — they add noise and can mask real failures with log output.

When Adding Logs

  • Log at info for significant lifecycle events (operation started/completed)
  • Log at debug for fine-grained tracing (request bodies, intermediate state)
  • Log at warn for recoverable anomalies
  • Log at error for failures that surface to the caller; include the error object as structured context: logger.error('Failed', { err })
  • Pass structured context as the second argument, not via string interpolation

Más skills de cloudflare

dependabot-review
cloudflare
Analiza un PR de Dependabot para determinar qué cambió realmente en cada paquete actualizado y si esos cambios afectan a este repositorio. Reporta APIs/métodos modificados,…
module-registry
cloudflare
Cargar al trabajar con el registro de módulos en workerd — leer, modificar, depurar o revisar la resolución, compilación, evaluación o registro de módulos…
reproduce
cloudflare
Reproducir un problema de GitHub de cloudflare/agents creando un proyecto mínimo de Agents/Worker y desplegándolo en una cuenta temporal de Cloudflare, luego informar…
local-explorer
cloudflare
Cómo agregar productos/recursos al explorador local o a la API local. Úselo al implementar nuevas API locales o rutas de interfaz de usuario bajo…
open-pr
cloudflare
Toma un issue de GitHub de cloudflare/agents más cualquier hallazgo de reproducción y genera de una sola vez un PR de corrección — rama, cambio, prueba, push, y abre el PR vinculado al issue.
write-endpoints
cloudflare
Guía completa para construir endpoints OpenAPI con chanfana: definición de esquemas, validación de solicitudes, operaciones CRUD, integración con base de datos D1 y…
agents-sdk
cloudflare
Construye agentes de IA en Cloudflare Workers usando el Agents SDK. Carga al crear agentes con estado, flujos de trabajo duraderos, aplicaciones WebSocket en tiempo real, tareas programadas,…
changelog
cloudflare
Crea, actualiza y revisa entradas del registro de cambios de productos para el sitio de documentación de Cloudflare. Cargar al generar archivos MDX de registro de cambios, editar existentes…