
# Loggning

Queuety loggar varje jobb- och arbetsflödeshändelse i databastabellen `queuety_logs`. Det finns inga loggfiler. Alla poster kan sökas via PHP API och CLI.

## Händelsetyper

Varje loggpost har en händelsetyp från enumen `LogEvent`:

| Händelse | Beskrivning |
|---|---|
| `started` | Jobbkörningen startade |
| `completed` | Jobbet slutfördes utan fel |
| `failed` | Ett försök kastade ett undantag och kommer att göras om (det sista försöket loggar endast `buried`) |
| `buried` | Jobbet har förbrukat alla omförsök |
| `retried` | Jobbet schemalades för omförsök |
| `workflow_started` | Arbetsflödet skickades iväg |
| `workflow_completed` | Alla steg i arbetsflödet slutfördes |
| `workflow_failed` | Arbetsflödessteget misslyckades permanent |
| `workflow_paused` | Arbetsflödet pausades |
| `workflow_resumed` | Arbetsflödet återupptogs |
| `workflow_cancelled` | Arbetsflödet avbröts |
| `workflow_rewound` | Arbetsflödet spolades tillbaka till ett tidigare steg |
| `workflow_forked` | Arbetsflödet förgrenades till ett nytt arbetsflöde |
| `workflow_deadline_exceeded` | Arbetsflödet missade sin tidsfrist `must_complete_within()` |
| `debug` | Meddelande på felsökningsnivå (när `QUEUETY_DEBUG` är aktiverat) |

## Loggfält

Varje loggpost innehåller:

| Fält | Beskrivning |
|---|---|
| `id` | Autoincrementerande ID |
| `event` | Händelsetypsträng |
| `handler` | Hanterarnamn eller klass |
| `job_id` | Tillhörande jobb-ID (kan vara null) |
| `workflow_id` | Tillhörande arbetsflödes-ID (kan vara null) |
| `step_index` | Arbetsflödesstegets index (kan vara null) |
| `attempt` | Försöksnummer |
| `duration_ms` | Körningstid i millisekunder |
| `error_message` | Felmeddelande om körningen misslyckades |
| `created_at` | Tidsstämpel |

## Söka i loggar 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 );
```

## Söka i loggar 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
```

## Loggbevarande

Loggar sparas tills du rensar dem. Konstanten `QUEUETY_LOG_RETENTION_DAYS` läses av `Config::log_retention_days()`, men används ännu inte till något och rensar därför ingenting ([#15](https://github.com/inline0/queuety/issues/15)). Det går inte heller att nå underkommandot `wp queuety log purge` ([#11](https://github.com/inline0/queuety/issues/11)).

Rensa från PHP, till exempel från en egen schemalagd aktivitet eller med `wp eval`:

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