로깅
사용자 대상 개요(CLI + Control UI + 설정)는 /logging을 참조하세요.
OpenClaw에는 두 가지 로그 "표면"이 있습니다:
- 콘솔 출력 (터미널 / Debug UI에서 보이는 것).
- 파일 로그 (JSON 라인) gateway logger에 의해 작성됩니다.
파일 기반 로거
- 기본 롤링 로그 파일은 /tmp/openclaw/ 아래에 있습니다 (하루에 하나의 파일): openclaw-YYYY-MM-DD.log
- 날짜는 gateway 호스트의 로컬 시간대를 사용합니다.
- 로그 파일 경로 및 레벨은 ~/.openclaw/openclaw.json을 통해 설정할 수 있습니다:
- logging.file
- logging.level
파일 형식은 한 줄에 하나의 JSON 객체입니다.
Control UI Logs 탭은 gateway를 통해 이 파일을 tail합니다 (logs.tail). CLI도 동일하게 할 수 있습니다:
openclaw logs --follow
Verbose vs. 로그 레벨
- 파일 로그는 logging.level에 의해서만 제어됩니다.
- --verbose는 콘솔 verbosity만 영향을 줍니다 (그리고 WS 로그 스타일); 파일 로그 레벨을 높이지 않습니다.
- 파일 로그에서 verbose 전용 세부 정보를 캡처하려면 logging.level을 debug 또는 trace로 설정하세요.
콘솔 캡처
CLI는 console.log/info/warn/error/debug/trace를 캡처하여 파일 로그에 작성하면서도 stdout/stderr에 계속 출력합니다.
콘솔 verbosity를 독립적으로 조정할 수 있습니다:
- logging.consoleLevel (기본값 info)
- logging.consoleStyle (pretty | compact | json)
도구 요약 수정
Verbose 도구 요약(예: 🛠️ Exec: ...)은 콘솔 스트림에 도달하기 전에 민감한 토큰을 마스킹할 수 있습니다. 이는 도구 전용이며 파일 로그를 변경하지 않습니다.
- logging.redactSensitive: off | tools (기본값: tools)
- logging.redactPatterns: 정규식 문자열 배열 (기본값 재정의)
- 원시 정규식 문자열(자동 gi) 사용, 또는 커스텀 플래그가 필요한 경우 /pattern/flags 사용.
- 매치는 처음 6자 + 마지막 4자를 유지하여 마스킹됩니다 (길이 >= 18), 그렇지 않으면 ***.
- 기본값은 일반적인 키 할당, CLI 플래그, JSON 필드, bearer 헤더, PEM 블록 및 인기 있는 토큰 접두사를 포함합니다.
Gateway WebSocket 로그
Gateway는 WebSocket 프로토콜 로그를 두 가지 모드로 출력합니다:
- 일반 모드 (--verbose 없음): "흥미로운" RPC 결과만 출력합니다:
- 오류 (ok=false)
- 느린 호출 (기본 임계값: >= 50ms)
- 파싱 오류
- Verbose 모드 (--verbose): 모든 WS 요청/응답 트래픽을 출력합니다.
WS 로그 스타일
openclaw gateway는 gateway별 스타일 스위치를 지원합니다:
- --ws-log auto (기본값): 일반 모드는 최적화됨; verbose 모드는 compact 출력 사용
- --ws-log compact: verbose일 때 compact 출력 (쌍을 이룬 요청/응답)
- --ws-log full: verbose일 때 전체 프레임별 출력
- --compact: --ws-log compact의 별칭
예제:
# optimized (only errors/slow)
openclaw gateway
# show all WS traffic (paired)
openclaw gateway --verbose --ws-log compact
# show all WS traffic (full meta)
openclaw gateway --verbose --ws-log full
콘솔 포맷팅 (하위 시스템 로깅)
콘솔 포매터는 TTY 인식이며 일관된 접두사가 붙은 줄을 출력합니다. 하위 시스템 로거는 출력을 그룹화하고 스캔 가능하게 유지합니다.
동작:
- 모든 줄에 하위 시스템 접두사 (예: [gateway], [canvas], [tailscale])
- 하위 시스템 색상 (하위 시스템별로 안정적) 및 레벨 색상 지정
- 출력이 TTY이거나 환경이 풍부한 터미널처럼 보일 때 색상 사용 (TERM/COLORTERM/TERM_PROGRAM), NO_COLOR 준수
- 단축된 하위 시스템 접두사: 선행 gateway/ + channels/ 삭제, 마지막 2개 세그먼트 유지 (예: whatsapp/outbound)
- 하위 시스템별 하위 로거 (자동 접두사 + 구조화된 필드 { subsystem })
- logRaw() QR/UX 출력용 (접두사 없음, 포맷팅 없음)
- 콘솔 스타일 (예: pretty | compact | json)
- 콘솔 로그 레벨은 파일 로그 레벨과 별개 (파일은 logging.level이 debug/trace로 설정된 경우 전체 세부 정보 유지)
- WhatsApp 메시지 본문은 debug에 로깅됩니다 (보려면 --verbose 사용)
이는 기존 파일 로그를 안정적으로 유지하면서 대화형 출력을 스캔 가능하게 만듭니다.