
# Logboekregistratie

Queuety registreert elke taak- en workflowgebeurtenis in de databasetabel `queuety_logs`. Er zijn geen logbestanden. Alle vermeldingen kunnen worden opgevraagd via de PHP API en CLI.

## Gebeurtenistypen

Elke logvermelding heeft een gebeurtenistype uit de enum `LogEvent`:

| Gebeurtenis | Beschrijving |
|---|---|
| `started` | Taakuitvoering gestart |
| `completed` | Taak succesvol voltooid |
| `failed` | Een poging veroorzaakte een uitzondering en wordt opnieuw geprobeerd (de laatste poging registreert alleen `buried`) |
| `buried` | Alle nieuwe pogingen voor de taak zijn opgebruikt |
| `retried` | Taak ingepland voor een nieuwe poging |
| `workflow_started` | Workflow gestart |
| `workflow_completed` | Alle workflowstappen voltooid |
| `workflow_failed` | Workflowstap definitief mislukt |
| `workflow_paused` | Workflow gepauzeerd |
| `workflow_resumed` | Workflow hervat |
| `workflow_cancelled` | Workflow geannuleerd |
| `workflow_rewound` | Workflow teruggezet naar een eerdere stap |
| `workflow_forked` | Workflow vertakt naar een nieuwe workflow |
| `workflow_deadline_exceeded` | Deadline van workflow `must_complete_within()` gemist |
| `debug` | Bericht op foutopsporingsniveau (wanneer `QUEUETY_DEBUG` is ingeschakeld) |

## Logvelden

Elke logvermelding bevat:

| Veld | Beschrijving |
|---|---|
| `id` | Automatisch oplopende ID |
| `event` | Gebeurtenistypestring |
| `handler` | Handlernaam of klasse |
| `job_id` | Bijbehorende taak-ID (kan null zijn) |
| `workflow_id` | Bijbehorende workflow-ID (kan null zijn) |
| `step_index` | Index van de workflowstap (kan null zijn) |
| `attempt` | Pogingsnummer |
| `duration_ms` | Uitvoeringsduur in milliseconden |
| `error_message` | Foutmelding bij mislukking |
| `created_at` | Tijdstempel |

## Logs opvragen via 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 );
```

## Logs opvragen via 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
```

## Logbewaring

Logs worden bewaard totdat u ze wist. De constante `QUEUETY_LOG_RETENTION_DAYS` wordt gelezen door `Config::log_retention_days()`, maar wordt nog nergens gebruikt en wist dus niets ([#15](https://github.com/inline0/queuety/issues/15)). Ook de subopdracht `wp queuety log purge` kan niet worden bereikt ([#11](https://github.com/inline0/queuety/issues/11)).

Wis logs vanuit PHP, bijvoorbeeld vanuit uw eigen geplande taak of met `wp eval`:

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