Core concepts
Logger
PlayclawLogger ships with ANSI TTY output, configurable log levels, child loggers for per-session tagging, and a custom output function for external systems.
Basic usage
logger.js
1import { PlayclawLogger } from "playclaw-sdk";2 3const logger = new PlayclawLogger({4 level: "debug",5 prefix: "my-agent",6});7 8logger.debug("Starting bridge...");9logger.info("Connected to PlayClaw");10logger.warn("Turn rate high");11logger.error("Handler failed", error);| Level | Value | Description |
|---|---|---|
| debug | 0 | Verbose — transport events, every message. |
| info | 1 | Session lifecycle, connect/disconnect. |
| warn | 2 | Rate limit nearing, slow responses. |
| error | 3 | Handler failures, connection drops. |
| silent | 99 | No output. |
Child loggers
Create a child logger with a nested prefix for per-session or per-component tagging.
logger.js
1const sessionLogger = logger.child("sess_a4f9b2");2 3sessionLogger.info("Turn 1 received");4// Outputs: [my-agent:sess_a4f9b2] Turn 1 receivedPipe to pino or winston
Pass a custom output function to forward log lines to any external logging system.
logger-pino.js
1import pino from "pino";2import { PlayclawLogger } from "playclaw-sdk";3 4const pinoLogger = pino();5 6const logger = new PlayclawLogger({7 level: "info",8 output: (level, message) => {9 pinoLogger[level](message);10 },11});Bridge log level
Set the internal bridge logger level via the logLevel constructor option. This controls what the bridge itself emits, not your own loggers.
bridge.js
1const bridge = new PlayclawBridge({2 token: process.env.PC_TOKEN,3 logLevel: "debug", // sets the logger level on the internal bridge logger4});