
# Lokikirjaus

Queuety kirjaa jokaisen työ- ja työnkulkutapahtuman tietokantatauluun `queuety_logs`. Lokitiedostoja ei ole. Kaikista merkinnöistä voi tehdä kyselyjä toiminnoilla PHP API ja CLI.

## Tapahtumatyypit

Jokaisella lokimerkinnällä on tapahtumatyyppi enum-arvoista `LogEvent`:

| Tapahtuma | Kuvaus |
|---|---|
| `started` | Työn suoritus alkoi |
| `completed` | Työ valmistui onnistuneesti |
| `failed` | Yritys aiheutti poikkeuksen ja työ yritetään uudelleen (viimeisellä yrityksellä kirjataan vain `buried`) |
| `buried` | Työn kaikki uudelleenyritysyritykset käytettiin loppuun |
| `retried` | Työ ajastettiin uudelleen yritettäväksi |
| `workflow_started` | Työnkulku käynnistettiin |
| `workflow_completed` | Kaikki työnkulun vaiheet valmistuivat |
| `workflow_failed` | Työnkulun vaihe epäonnistui pysyvästi |
| `workflow_paused` | Työnkulku keskeytettiin |
| `workflow_resumed` | Työnkulkua jatkettiin |
| `workflow_cancelled` | Työnkulku peruutettiin |
| `workflow_rewound` | Työnkulku palautettiin aiempaan vaiheeseen |
| `workflow_forked` | Työnkulusta haarautettiin uusi työnkulku |
| `workflow_deadline_exceeded` | Työnkulun `must_complete_within()`-määräaika ylittyi |
| `debug` | Virheenkorjauksen tasoinen viesti (kun `QUEUETY_DEBUG` on käytössä) |

## Lokikentät

Jokainen lokimerkintä sisältää:

| Kenttä | Kuvaus |
|---|---|
| `id` | Automaattisesti kasvava tunnus |
| `event` | Tapahtumatyypin merkkijono |
| `handler` | Käsittelijän nimi tai luokka |
| `job_id` | Liittyvän työn tunnus (voi olla null) |
| `workflow_id` | Liittyvän työnkulun tunnus (voi olla null) |
| `step_index` | Työnkulun vaiheen indeksi (voi olla null) |
| `attempt` | Yrityksen numero |
| `duration_ms` | Suorituksen kesto millisekunteina |
| `error_message` | Virheilmoitus epäonnistumisen yhteydessä |
| `created_at` | Aikaleima |

## Lokien kysely PHPn kautta

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

## Lokien kysely CLIn kautta

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

## Lokien säilytys

Lokeja säilytetään, kunnes tyhjennät ne. `QUEUETY_LOG_RETENTION_DAYS`-vakion lukee `Config::log_retention_days()`, mutta mikään ei vielä käytä sitä, joten se ei tyhjennä mitään ([#15](https://github.com/inline0/queuety/issues/15)). Myöskään alikomentoa `wp queuety log purge` ei voi käyttää ([#11](https://github.com/inline0/queuety/issues/11)).

Tyhjennä lokit PHPsta esimerkiksi omasta ajastetusta tehtävästäsi tai komennolla `wp eval`:

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