---
read_when:
    - การเปลี่ยนเอาต์พุตหรือรูปแบบการบันทึกล็อก
    - การดีบักเอาต์พุตของ CLI หรือ Gateway
summary: ช่องทางการบันทึก, บันทึกในไฟล์, รูปแบบบันทึก WS และการจัดรูปแบบคอนโซล
title: การบันทึกเหตุการณ์ของ Gateway
x-i18n:
    generated_at: "2026-05-02T10:16:43Z"
    model: gpt-5.5
    provider: openai
    source_hash: eb5f5ccd77909e82bd2938a33514ce8361c69910eb945c731d9b2c8266174c13
    source_path: gateway/logging.md
    workflow: 16
---

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

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

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

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

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

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

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

แท็บ Logs ใน Control UI จะติดตามไฟล์นี้ผ่าน Gateway (`logs.tail`)
CLI ก็ทำแบบเดียวกันได้:

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

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

- **ล็อกไฟล์** ถูกควบคุมโดย `logging.level` เท่านั้น
- `--verbose` มีผลเฉพาะกับ **ความละเอียดของคอนโซล** (และรูปแบบล็อก WS) เท่านั้น; มัน **ไม่**
  ยกระดับล็อกของไฟล์
- หากต้องการบันทึกรายละเอียดที่มีเฉพาะใน verbose ลงในล็อกไฟล์ ให้ตั้ง `logging.level` เป็น `debug` หรือ
  `trace`
- การบันทึกล็อกระดับ Trace ยังรวมสรุปเวลาสำหรับการวินิจฉัยของเส้นทางที่ใช้งานหนักบางรายการ
  เช่น การเตรียม factory ของเครื่องมือ Plugin ดู
  [/tools/plugin#slow-plugin-tool-setup](/th/tools/plugin#slow-plugin-tool-setup)

## การจับเอาต์พุตคอนโซล

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

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

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

## การปกปิดข้อมูล

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

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

ขอบเขตความปลอดภัยบางส่วนจะปกปิดข้อมูลเสมอ ไม่ว่า `logging.redactSensitive` จะเป็นค่าใด
ซึ่งรวมถึงเหตุการณ์การเรียกเครื่องมือของ Control UI, เอาต์พุตเครื่องมือ `sessions_history`,
การส่งออกข้อมูลสนับสนุนการวินิจฉัย, การสังเกตข้อผิดพลาดของผู้ให้บริการ, การแสดงคำสั่งอนุมัติ exec
และล็อกโปรโตคอล Gateway WebSocket พื้นผิวเหล่านี้อาจยังใช้
`logging.redactPatterns` เป็นรูปแบบเพิ่มเติมได้ แต่ `redactSensitive: "off"`
จะไม่ทำให้พื้นผิวเหล่านี้ปล่อยความลับแบบดิบออกมา

## ล็อก Gateway WebSocket

Gateway พิมพ์ล็อกโปรโตคอล WebSocket ในสองโหมด:

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

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

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

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

ตัวอย่าง:

```bash
# 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` เพื่อดู)

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

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

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