mirror of
https://github.com/qwibitai/nanoclaw.git
synced 2026-06-04 10:14:47 +08:00
47950671fa
- docs/v1-vs-v2/: full v1→v2 regression analysis (SUMMARY + 21 per-module docs + ACTION-ITEMS rollup with decisions + timezone recreation spec). - container/agent-runner/scripts/sdk-signal-probe.ts: empirical harness used to characterise Claude Agent SDK event/hook/stderr timing for the stuck-detection design in item 9. - src/channels/chat-sdk-bridge.ts: document the conversations Map staleness in a code comment; fix deferred to when dynamic group registration lands (ACTION-ITEMS item 17). No runtime behavior change. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2.4 KiB
2.4 KiB
logger: v1 vs v2
Scope
- v1:
src/v1/logger.ts(70 LOC) — exportlogger - v2 counterpart:
src/log.ts(65 LOC) — exportlog
Capability map
| v1 behavior | v2 location | Status | Notes |
|---|---|---|---|
| Levels (debug=20, info=30, warn=40, error=50, fatal=60) | src/log.ts:1 |
kept | Identical numeric map |
debug/info/warn/error/fatal methods |
src/log.ts:50-54 |
renamed | logger.X(...) → log.X(...) |
Data-first signature (data, msg) |
src/log.ts:42-58 |
changed | v2 requires message-first (msg, data?) — breaking for every callsite |
| Color codes (per-level + KEY_COLOR=magenta, MSG_COLOR=cyan) | src/log.ts:4-14 |
kept | Identical |
| LOG_LEVEL env threshold | src/log.ts:16 |
kept | 'info' default |
Timestamp HH:MM:SS.mmm |
src/log.ts:33-40 |
kept | Refactored, same output |
| Error formatting | src/log.ts:18-23 |
changed | v1 pretty multi-line JSON; v2 single-line |
| Data formatting | src/log.ts:25-31 |
changed | v1 per-line indented; v2 inline key=value |
| Process ID in output | — | removed | v1 emitted (${process.pid}); v2 drops it |
| info/debug → stdout, warn/error/fatal → stderr | src/log.ts:45 |
kept | Identical routing |
uncaughtException → fatal + exit(1) |
src/log.ts:57-60 |
kept | Arg order swapped |
unhandledRejection → error |
src/log.ts:62-64 |
kept | Arg order swapped |
Missing from v2
- Process ID in log output — lost visibility into emitting process in multi-container scenarios
- Data-first overload — v1
logger.warn({err, path}, 'msg')is a breaking API change in v2 - Multi-line error formatting — condensed single-line form is harder to read for stack traces
Behavioral discrepancies
- Argument order:
logger.error({err}, 'failed')must becomelog.error('failed', {err})at every callsite - Error output: v1 pretty-prints JSON over 3 lines; v2 collapses to one line
- Data output: v1 newline+indent per key; v2 space-separated inline
Not in either
File rotation, redaction rules, on-disk logging — both stream to stdout/stderr only.
Worth preserving?
Restoring PID to v2 output is cheap and helps multi-process debugging. Multi-line error format is worth a verbose-mode flag for error/fatal. Signature swap is stylistic; not worth reverting but every v1 logger → log migration must swap (data, msg) → (msg, data).