
# Protokollierung

Queuety protokolliert alle Job- und Workflow-Ereignisse in der Datenbanktabelle `queuety_logs`. Es gibt keine Protokolldateien. Alle Einträge lassen sich über PHP API und CLI abfragen.

## Ereignistypen

Jeder Protokolleintrag hat einen Ereignistyp aus dem Enum `LogEvent`:

| Ereignis | Beschreibung |
|---|---|
| `started` | Jobausführung gestartet |
| `completed` | Job erfolgreich abgeschlossen |
| `failed` | Ein Versuch ist fehlgeschlagen und wird wiederholt (beim letzten Versuch wird nur `buried` protokolliert) |
| `buried` | Alle Wiederholungsversuche des Jobs sind ausgeschöpft |
| `retried` | Job zur Wiederholung eingeplant |
| `workflow_started` | Workflow ausgelöst |
| `workflow_completed` | Alle Workflow-Schritte abgeschlossen |
| `workflow_failed` | Workflow-Schritt dauerhaft fehlgeschlagen |
| `workflow_paused` | Workflow pausiert |
| `workflow_resumed` | Workflow fortgesetzt |
| `workflow_cancelled` | Workflow abgebrochen |
| `workflow_rewound` | Workflow zu einem früheren Schritt zurückgesetzt |
| `workflow_forked` | Workflow in einen neuen Workflow verzweigt |
| `workflow_deadline_exceeded` | Deadline des Workflows `must_complete_within()` verpasst |
| `debug` | Meldung auf Debug-Ebene (wenn `QUEUETY_DEBUG` aktiviert ist) |

## Protokollfelder

Jeder Protokolleintrag enthält:

| Feld | Beschreibung |
|---|---|
| `id` | Automatisch hochgezählte ID |
| `event` | Ereignistyp als Zeichenfolge |
| `handler` | Handlername oder -klasse |
| `job_id` | Zugehörige Job-ID (darf null sein) |
| `workflow_id` | Zugehörige Workflow-ID (darf null sein) |
| `step_index` | Index des Workflow-Schritts (darf null sein) |
| `attempt` | Versuchsnummer |
| `duration_ms` | Ausführungsdauer in Millisekunden |
| `error_message` | Fehlermeldung bei Fehlschlag |
| `created_at` | Zeitstempel |

## Protokolle über PHP abfragen

```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 );
```

## Protokolle über CLI abfragen

```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
```

## Aufbewahrungsdauer der Protokolle

Protokolle bleiben erhalten, bis du sie bereinigst. Die Konstante `QUEUETY_LOG_RETENTION_DAYS` wird von `Config::log_retention_days()` ausgelesen, aber noch nicht verwendet und löscht daher nichts ([#15](https://github.com/inline0/queuety/issues/15)). Auch das Unterkommando `wp queuety log purge` ist nicht erreichbar ([#11](https://github.com/inline0/queuety/issues/11)).

Bereinige Protokolle über PHP, zum Beispiel mit einer eigenen geplanten Aufgabe oder mit `wp eval`:

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