
logging
✓ Official★ 1,100by cloudflare · part of cloudflare/sandbox-sdk
Use when adding logs, debugging, or working with the Logger across the SDK and container runtime. Covers the constructor-injection pattern, child loggers,…
Use when adding logs, debugging, or working with the Logger across the SDK and container runtime. Covers the constructor-injection pattern, child loggers,…
Inspect the full instructions your agent will receiveExpandCollapse
This is the exact playbook injected into your agent when the skill activates — shown here so you can audit it before installing. You don't need to read it to use the skill.
name: logging description: Use when adding logs, debugging, or working with the Logger across the SDK and container runtime. Covers the constructor-injection pattern, child loggers, env-var configuration, and test mocking. (project)
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.
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
npx skills add https://github.com/cloudflare/sandbox-sdk --skill loggingRun this in your project — your agent picks the skill up automatically.
Configuration
Two environment variables, both read once at startup:
| Var | Values | Purpose |
|---|---|---|
SANDBOX_LOG_LEVEL | debug | info | warn | error | Minimum level emitted |
SANDBOX_LOG_FORMAT | json | pretty | Output format |
Use json in production (machine-parseable) and pretty for local dev.
No common issues documented yet. If you hit a problem, the repository's GitHub Issues page is the best place to look.