---
read_when:
    - การเปลี่ยนเอาต์พุตหรือรูปแบบของการบันทึกล็อก
    - การดีบักเอาต์พุตของ CLI หรือ gateway
summary: พื้นผิวการบันทึกล็อก ไฟล์ล็อก รูปแบบล็อกของ WS และการจัดรูปแบบคอนโซล
title: การบันทึกล็อกของ Gateway
x-i18n:
    generated_at: "2026-04-26T11:29:51Z"
    model: gpt-5.4
    provider: openai
    source_hash: c005cfc4cfe456b3734d3928a16c9cd131a2b465d46f2aba9c9c61db22dcc399
    source_path: gateway/logging.md
    workflow: 15
---

# การบันทึกล็อก

สำหรับภาพรวมที่เน้นผู้ใช้ (CLI + Control UI + config) ดู [/logging](/th/logging)

OpenClaw มี “พื้นผิว” ของล็อกอยู่สองแบบ:

- **เอาต์พุตคอนโซล** (สิ่งที่คุณเห็นในเทอร์มินัล / Debug UI)
- **ไฟล์ล็อก** (JSON lines) ที่เขียนโดยตัวบันทึกล็อกของ gateway

## ตัวบันทึกล็อกแบบใช้ไฟล์

- ไฟล์ล็อกแบบหมุนเวียนค่าเริ่มต้นอยู่ภายใต้ `/tmp/openclaw/` (หนึ่งไฟล์ต่อวัน): `openclaw-YYYY-MM-DD.log`
  - วันที่ใช้ timezone ท้องถิ่นของโฮสต์ที่รัน gateway
- ไฟล์ล็อกที่กำลังใช้งานจะหมุนเมื่อถึง `logging.maxFileBytes` (ค่าเริ่มต้น: 100 MB) โดยเก็บไฟล์ archive ที่มีหมายเลขกำกับไว้ได้สูงสุดห้าไฟล์ และเขียนต่อในไฟล์ active ใหม่
- สามารถกำหนดพาธและระดับของไฟล์ล็อกได้ผ่าน `~/.openclaw/openclaw.json`:
  - `logging.file`
  - `logging.level`

รูปแบบไฟล์คือหนึ่งออบเจ็กต์ JSON ต่อหนึ่งบรรทัด

แท็บ Logs ของ Control UI จะ tail ไฟล์นี้ผ่าน gateway (`logs.tail`)
CLI ก็ทำแบบเดียวกันได้:

```bash
openclaw logs --follow
```

**Verbose เทียบกับระดับล็อก**

- **ไฟล์ล็อก** ถูกควบคุมโดย `logging.level` เท่านั้น
- `--verbose` มีผลเฉพาะกับ **ความละเอียดของคอนโซล** (และรูปแบบล็อกของ WS); มัน **ไม่ได้**
  ยกระดับของไฟล์ล็อก
- หากต้องการเก็บรายละเอียดระดับ verbose ลงในไฟล์ล็อก ให้ตั้ง `logging.level` เป็น `debug` หรือ
  `trace`

## การดักจับคอนโซล

CLI จะดักจับ `console.log/info/warn/error/debug/trace` และเขียนลงไฟล์ล็อก
ขณะเดียวกันก็ยังพิมพ์ไปยัง stdout/stderr ต่อไป

คุณสามารถปรับความละเอียดของคอนโซลแยกต่างหากได้ผ่าน:

- `logging.consoleLevel` (ค่าเริ่มต้น `info`)
- `logging.consoleStyle` (`pretty` | `compact` | `json`)

## การปกปิดข้อมูลในสรุปเครื่องมือ

สรุปเครื่องมือแบบ verbose (เช่น `🛠️ Exec: ...`) สามารถปกปิดโทเค็นที่อ่อนไหวก่อนที่ข้อมูลจะไปถึง
สตรีมคอนโซลได้ สิ่งนี้ใช้กับ **tools เท่านั้น** และไม่เปลี่ยนแปลงไฟล์ล็อก

- `logging.redactSensitive`: `off` | `tools` (ค่าเริ่มต้น: `tools`)
- `logging.redactPatterns`: อาร์เรย์ของสตริง regex (ใช้แทนค่าเริ่มต้น)
  - ใช้สตริง regex ดิบ (ใส่ `gi` ให้อัตโนมัติ) หรือ `/pattern/flags` หากคุณต้องการแฟล็กแบบกำหนดเอง
  - การจับคู่จะถูกปกปิดโดยคง 6 อักขระแรก + 4 อักขระสุดท้ายไว้ (เมื่อความยาว >= 18) มิฉะนั้นใช้ `***`
  - ค่าเริ่มต้นครอบคลุมการกำหนดค่าคีย์ทั่วไป, CLI flags, ฟิลด์ JSON, bearer header, PEM block และ prefix ของโทเค็นยอดนิยม

## ล็อก WebSocket ของ Gateway

gateway จะพิมพ์ล็อกโปรโตคอล WebSocket ได้สองโหมด:

- **โหมดปกติ (ไม่มี `--verbose`)**: พิมพ์เฉพาะผลลัพธ์ RPC ที่ “น่าสนใจ”:
  - ข้อผิดพลาด (`ok=false`)
  - การเรียกที่ช้า (threshold ค่าเริ่มต้น: `>= 50ms`)
  - parse error
- **โหมด verbose (`--verbose`)**: พิมพ์ทราฟฟิก WS request/response ทั้งหมด

### รูปแบบล็อกของ WS

`openclaw gateway` รองรับสวิตช์รูปแบบราย gateway:

- `--ws-log auto` (ค่าเริ่มต้น): โหมดปกติถูกปรับให้เหมาะสม; โหมด verbose ใช้เอาต์พุตแบบ compact
- `--ws-log compact`: เอาต์พุตแบบ compact (จับคู่ request/response) เมื่ออยู่ในโหมด verbose
- `--ws-log full`: เอาต์พุตต่อเฟรมแบบเต็มเมื่ออยู่ในโหมด verbose
- `--compact`: ชื่อแฝงของ `--ws-log compact`

ตัวอย่าง:

```bash
# ปรับให้เหมาะสม (เฉพาะ error/slow)
openclaw gateway

# แสดงทราฟฟิก WS ทั้งหมด (แบบจับคู่)
openclaw gateway --verbose --ws-log compact

# แสดงทราฟฟิก WS ทั้งหมด (meta แบบเต็ม)
openclaw gateway --verbose --ws-log full
```

## การจัดรูปแบบคอนโซล (การบันทึกล็อกของซับซิสเต็ม)

ตัวจัดรูปแบบคอนโซล **รับรู้ TTY** และพิมพ์บรรทัดที่มี prefix อย่างสม่ำเสมอ
ตัวบันทึกล็อกของซับซิสเต็มช่วยให้เอาต์พุตถูกจัดกลุ่มและสแกนได้ง่าย

พฤติกรรม:

- **prefix ของซับซิสเต็ม** ในทุกบรรทัด (เช่น `[gateway]`, `[canvas]`, `[tailscale]`)
- **สีของซับซิสเต็ม** (คงที่ต่อซับซิสเต็ม) พร้อมกับสีตามระดับล็อก
- **ใช้สีเมื่อเอาต์พุตเป็น TTY หรือ environment ดูเหมือนเทอร์มินัลแบบสมบูรณ์** (`TERM`/`COLORTERM`/`TERM_PROGRAM`) และเคารพ `NO_COLOR`
- **prefix ของซับซิสเต็มแบบย่อ**: ตัด `gateway/` + `channels/` ที่นำหน้าออก แล้วเก็บ 2 segment สุดท้ายไว้ (เช่น `whatsapp/outbound`)
- **sub-logger ตามซับซิสเต็ม** (ใส่ prefix อัตโนมัติ + ฟิลด์เชิงโครงสร้าง `{ subsystem }`)
- **`logRaw()`** สำหรับเอาต์พุต QR/UX (ไม่มี prefix, ไม่มีการจัดรูปแบบ)
- **รูปแบบคอนโซล** (เช่น `pretty | compact | json`)
- **ระดับล็อกของคอนโซล** แยกจากระดับล็อกของไฟล์ (ไฟล์ยังคงเก็บรายละเอียดเต็มเมื่อ `logging.level` ตั้งเป็น `debug`/`trace`)
- **เนื้อหาข้อความของ WhatsApp** จะถูกบันทึกที่ระดับ `debug` (ใช้ `--verbose` เพื่อดู)

สิ่งนี้ช่วยให้ไฟล์ล็อกเดิมยังคงเสถียร ขณะเดียวกันก็ทำให้เอาต์พุตแบบโต้ตอบสแกนได้ง่ายขึ้น

## ที่เกี่ยวข้อง

- [การบันทึกล็อก](/th/logging)
- [การส่งออก OpenTelemetry](/th/gateway/opentelemetry)
- [การส่งออกข้อมูลวินิจฉัย](/th/gateway/diagnostics)
