Files
Codewalkers/docs/logging.md
2026-02-07 00:33:12 +01:00

2.3 KiB

Structured Logging

Codewalk District uses pino for structured JSON logging on the backend.

Architecture

  • pino writes structured JSON to stderr so CLI user output on stdout stays clean
  • console.log remains for CLI command handlers (user-facing output on stdout)
  • The src/logging/ module (ProcessLogWriter/LogManager) is a separate concern — it captures per-agent process stdout/stderr to files

Environment Variables

Variable Description Default
CW_LOG_LEVEL Log level override (fatal, error, warn, info, debug, trace, silent) info (production), debug (development)
CW_LOG_PRETTY Set to 1 for human-readable colorized output via pino-pretty unset (JSON output)

Log Levels

Level Usage
fatal Process will exit (uncaught exceptions, DB migration failure)
error Operation failed (agent crash, parse failure, clone failure)
warn Degraded (account exhausted, no accounts available, stale PID, reconcile marking crashed)
info State transitions (agent spawned/stopped/resumed, dispatch decision, server started, account selected/switched)
debug Implementation details (command being built, session ID extraction, worktree paths, schema selection)

Adding Logging to a New Module

import { createModuleLogger } from '../logger/index.js';

const log = createModuleLogger('my-module');

// Use structured data as first arg, message as second
log.info({ taskId, agentId }, 'task dispatched');
log.error({ err: error }, 'operation failed');
log.debug({ path, count }, 'processing items');

Module Names

Module Used in
agent-manager src/agent/manager.ts
dispatch src/dispatch/manager.ts
http src/server/index.ts
server src/cli/index.ts (startup)
git src/git/manager.ts, src/git/clone.ts, src/git/project-clones.ts
db src/db/ensure-schema.ts

Testing

Logs are silenced in tests via CW_LOG_LEVEL=silent in vitest.config.ts.

Quick Start

# Pretty logs during development
CW_LOG_LEVEL=debug CW_LOG_PRETTY=1 cw --server

# JSON logs for production/piping
cw --server 2>server.log