
# Protokolovanie

Queuety zaznamenáva každú udalosť úlohy a pracovného postupu do databázovej tabuľky `queuety_logs`. Žiadne súbory protokolov sa nevytvárajú. Všetky záznamy možno vyhľadávať pomocou PHP API a CLI.

## Typy udalostí

Každý záznam protokolu má typ udalosti z výčtu `LogEvent`:

| Udalosť | Opis |
|---|---|
| `started` | Začalo sa vykonávanie úlohy |
| `completed` | Úloha sa úspešne dokončila |
| `failed` | Pri pokuse došlo k výnimke a pokus sa zopakuje (pri poslednom pokuse sa zaznamená iba `buried`) |
| `buried` | Úloha vyčerpala všetky opakované pokusy |
| `retried` | Opakovanie úlohy bolo naplánované |
| `workflow_started` | Pracovný postup bol spustený |
| `workflow_completed` | Všetky kroky pracovného postupu sa dokončili |
| `workflow_failed` | Krok pracovného postupu natrvalo zlyhal |
| `workflow_paused` | Pracovný postup bol pozastavený |
| `workflow_resumed` | Pracovný postup bol obnovený |
| `workflow_cancelled` | Pracovný postup bol zrušený |
| `workflow_rewound` | Pracovný postup sa vrátil k predchádzajúcemu kroku |
| `workflow_forked` | Pracovný postup sa rozvetvil do nového pracovného postupu |
| `workflow_deadline_exceeded` | Pracovný postup zmeškal termín `must_complete_within()` |
| `debug` | Správa úrovne ladenia (keď je povolené `QUEUETY_DEBUG`) |

## Polia protokolu

Každý záznam protokolu obsahuje:

| Pole | Opis |
|---|---|
| `id` | Automaticky zvyšované ID |
| `event` | Reťazec typu udalosti |
| `handler` | Názov obslužnej rutiny alebo trieda |
| `job_id` | Súvisiace ID úlohy (môže byť null) |
| `workflow_id` | Súvisiace ID pracovného postupu (môže byť null) |
| `step_index` | Index kroku pracovného postupu (môže byť null) |
| `attempt` | Číslo pokusu |
| `duration_ms` | Trvanie vykonávania v milisekundách |
| `error_message` | Chybová správa v prípade zlyhania |
| `created_at` | Časová značka |

## Vyhľadávanie protokolov cez 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 );
```

## Vyhľadávanie protokolov cez 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
```

## Uchovávanie protokolov

Protokoly sa uchovávajú, kým ich nevymažete. Konštantu `QUEUETY_LOG_RETENTION_DAYS` číta `Config::log_retention_days()`, ale zatiaľ ju nič nepoužíva, takže nič nevymaže ([#15](https://github.com/inline0/queuety/issues/15)). Nedá sa spustiť ani podpríkaz `wp queuety log purge` ([#11](https://github.com/inline0/queuety/issues/11)).

Vymazanie vykonajte cez PHP, napríklad vo vlastnej naplánovanej úlohe alebo pomocou `wp eval`:

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