
# Pencatatan Log

Queuety mencatat setiap peristiwa pekerjaan dan alur kerja ke tabel basis data `queuety_logs`. Tidak ada file log. Semua entri dapat dikueri melalui PHP API dan CLI.

## Jenis peristiwa

Setiap entri log memiliki jenis peristiwa dari enum `LogEvent`:

| Peristiwa | Deskripsi |
|---|---|
| `started` | Eksekusi pekerjaan dimulai |
| `completed` | Pekerjaan berhasil diselesaikan |
| `failed` | Suatu percobaan menimbulkan pengecualian dan akan dicoba lagi (percobaan terakhir hanya mencatat `buried`) |
| `buried` | Semua percobaan ulang pekerjaan telah habis |
| `retried` | Pekerjaan dijadwalkan untuk dicoba lagi |
| `workflow_started` | Alur kerja dikirim |
| `workflow_completed` | Semua langkah alur kerja selesai |
| `workflow_failed` | Langkah alur kerja gagal secara permanen |
| `workflow_paused` | Alur kerja dijeda |
| `workflow_resumed` | Alur kerja dilanjutkan |
| `workflow_cancelled` | Alur kerja dibatalkan |
| `workflow_rewound` | Alur kerja dikembalikan ke langkah sebelumnya |
| `workflow_forked` | Alur kerja dicabangkan menjadi alur kerja baru |
| `workflow_deadline_exceeded` | Alur kerja melewati tenggat `must_complete_within()` |
| `debug` | Pesan tingkat debug (saat `QUEUETY_DEBUG` diaktifkan) |

## Kolom log

Setiap entri log memuat:

| Kolom | Deskripsi |
|---|---|
| `id` | ID yang bertambah otomatis |
| `event` | String jenis peristiwa |
| `handler` | Nama atau kelas handler |
| `job_id` | ID pekerjaan terkait (bisa null) |
| `workflow_id` | ID alur kerja terkait (bisa null) |
| `step_index` | Indeks langkah alur kerja (bisa null) |
| `attempt` | Nomor percobaan |
| `duration_ms` | Durasi eksekusi dalam milidetik |
| `error_message` | Pesan kesalahan jika gagal |
| `created_at` | Stempel waktu |

## Mengueri log melalui PHP

```php
$logger = Queuety::logger();

// Logs for a specific job
$logs = $logger->for_job( 42 );

// Logs for a specific workflow
$logs = $logger->for_workflow( 7 );

// Logs for a specific handler
$logs = $logger->for_handler( 'send_email', 50 );

// Logs for a specific event type
$logs = $logger->for_event( \Queuety\Enums\LogEvent::Failed, 50 );

// Logs since a datetime
$logs = $logger->since( new \DateTimeImmutable( '-1 hour' ), 100 );
```

## Mengueri log melalui CLI

```bash
# Recent logs (last 24 hours)
wp queuety log

# Logs for a specific job
wp queuety log --job=42

# Logs for a specific workflow
wp queuety log --workflow=7

# Logs for a handler
wp queuety log --handler=send_email

# Logs for an event type
wp queuety log --event=failed

# Logs since a datetime
wp queuety log --since="2025-01-01 00:00:00"

# Custom limit and format
wp queuety log --limit=100 --format=json
```

## Retensi log

Log disimpan sampai Anda menghapusnya. Konstanta `QUEUETY_LOG_RETENTION_DAYS` dibaca oleh `Config::log_retention_days()`, tetapi belum digunakan, jadi konstanta itu tidak menghapus apa pun ([#15](https://github.com/inline0/queuety/issues/15)). Subperintah `wp queuety log purge` juga tidak dapat dijalankan ([#11](https://github.com/inline0/queuety/issues/11)).

Hapus melalui PHP, misalnya dari tugas terjadwal Anda sendiri atau dengan `wp eval`:

```php
$count = Queuety::logger()->purge( 30 );
```
