
# Protokolování

Queuety zaznamenává každou událost úlohy a pracovního postupu do databázové tabulky `queuety_logs`. Žádné soubory protokolu se nepoužívají. Všechny položky lze vyhledávat pomocí PHP API a CLI.

## Typy událostí

Každá položka protokolu má typ události z výčtu `LogEvent`:

| Událost | Popis |
|---|---|
| `started` | Spuštěno zpracování úlohy |
| `completed` | Úloha byla úspěšně dokončena |
| `failed` | Pokus vyvolal výjimku a bude opakován (u posledního pokusu se zaznamená pouze `buried`) |
| `buried` | Úloha vyčerpala všechny pokusy o opakování |
| `retried` | Opakování úlohy bylo naplánováno |
| `workflow_started` | Byl spuštěn pracovní postup |
| `workflow_completed` | Všechny kroky pracovního postupu byly dokončeny |
| `workflow_failed` | Krok pracovního postupu trvale selhal |
| `workflow_paused` | Pracovní postup byl pozastaven |
| `workflow_resumed` | Pracovní postup byl obnoven |
| `workflow_cancelled` | Pracovní postup byl zrušen |
| `workflow_rewound` | Pracovní postup se vrátil k dřívějšímu kroku |
| `workflow_forked` | Pracovní postup byl rozvětven do nového pracovního postupu |
| `workflow_deadline_exceeded` | Pracovní postup zmeškal termín `must_complete_within()` |
| `debug` | Zpráva na úrovni ladění (je-li zapnuto `QUEUETY_DEBUG`) |

## Pole protokolu

Každá položka protokolu obsahuje:

| Pole | Popis |
|---|---|
| `id` | Automaticky zvyšované ID |
| `event` | Řetězec typu události |
| `handler` | Název obslužné rutiny nebo třída |
| `job_id` | ID související úlohy (může být null) |
| `workflow_id` | ID souvisejícího pracovního postupu (může být null) |
| `step_index` | Index kroku pracovního postupu (může být null) |
| `attempt` | Číslo pokusu |
| `duration_ms` | Doba zpracování v milisekundách |
| `error_message` | Chybová zpráva při selhání |
| `created_at` | Časové razítko |

## Dotazování protokolů přes 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 );
```

## Dotazování protokolů přes 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ávání protokolů

Protokoly zůstávají uložené, dokud je nevymažete. Konstantu `QUEUETY_LOG_RETENTION_DAYS` načítá `Config::log_retention_days()`, ale zatím ji nic nepoužívá, takže se podle ní nic nemaže ([#15](https://github.com/inline0/queuety/issues/15)). Nelze spustit ani podřízený příkaz `wp queuety log purge` ([#11](https://github.com/inline0/queuety/issues/11)).

Protokoly vymažte z PHP, například ve vlastní naplánované úloze nebo pomocí `wp eval`:

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