
# Logning

Queuety logger alle job- og workflowhændelser i databasetabellen `queuety_logs`. Der findes ingen logfiler. Alle poster kan forespørges via PHP API og CLI.

## Hændelsestyper

Hver logpost har en hændelsestype fra enumen `LogEvent`:

| Hændelse | Beskrivelse |
|---|---|
| `started` | Jobudførelse startet |
| `completed` | Job fuldført uden fejl |
| `failed` | Et forsøg udløste en undtagelse og gentages (det sidste forsøg logger kun `buried`) |
| `buried` | Jobbet har brugt alle gentagelsesforsøg |
| `retried` | Jobbet blev planlagt til gentagelse |
| `workflow_started` | Workflow blev sendt til behandling |
| `workflow_completed` | Alle workflowtrin blev fuldført |
| `workflow_failed` | Workflowtrin mislykkedes permanent |
| `workflow_paused` | Workflow blev sat på pause |
| `workflow_resumed` | Workflow blev genoptaget |
| `workflow_cancelled` | Workflow blev annulleret |
| `workflow_rewound` | Workflow blev rullet tilbage til et tidligere trin |
| `workflow_forked` | Workflow blev forgrenet til et nyt workflow |
| `workflow_deadline_exceeded` | Workflow overskred sin `must_complete_within()`-deadline |
| `debug` | Meddelelse på fejlfindingsniveau (når `QUEUETY_DEBUG` er aktiveret) |

## Logfelter

Hver logpost indeholder:

| Felt | Beskrivelse |
|---|---|
| `id` | ID, der øges automatisk |
| `event` | Hændelsestype som tekststreng |
| `handler` | Handlernavn eller -klasse |
| `job_id` | Tilknyttet job-ID (kan være null) |
| `workflow_id` | Tilknyttet workflow-ID (kan være null) |
| `step_index` | Indeks for workflowtrin (kan være null) |
| `attempt` | Forsøgsnummer |
| `duration_ms` | Udførelsesvarighed i millisekunder |
| `error_message` | Fejlmeddelelse ved fejl |
| `created_at` | Tidsstempel |

## Forespørg efter logfiler 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 );
```

## Forespørg efter logfiler 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
```

## Opbevaring af logfiler

Logfiler gemmes, indtil du rydder dem. Konstanten `QUEUETY_LOG_RETENTION_DAYS` læses af `Config::log_retention_days()`, men bruges endnu ikke, så den rydder intet ([#15](https://github.com/inline0/queuety/issues/15)). Underkommandoen `wp queuety log purge` kan heller ikke nås ([#11](https://github.com/inline0/queuety/issues/11)).

Ryd op via PHP, f.eks. fra din egen planlagte opgave eller med `wp eval`:

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