
# Registrazione dei log

Queuety registra ogni evento di job e workflow nella tabella `queuety_logs` del database. Non esistono file di log. Tutte le voci possono essere interrogate tramite PHP API e CLI.

## Tipi di evento

Ogni voce di log ha un tipo di evento definito dall'enum `LogEvent`:

| Evento | Descrizione |
|---|---|
| `started` | Esecuzione del job avviata |
| `completed` | Job completato correttamente |
| `failed` | Un tentativo ha generato un'eccezione e verrà ripetuto (il tentativo finale registra solo `buried`) |
| `buried` | Il job ha esaurito tutti i tentativi di ripetizione |
| `retried` | Il job è stato pianificato per un nuovo tentativo |
| `workflow_started` | Il workflow è stato avviato |
| `workflow_completed` | Tutti i passaggi del workflow sono terminati |
| `workflow_failed` | Il passaggio del workflow è fallito definitivamente |
| `workflow_paused` | Il workflow è stato messo in pausa |
| `workflow_resumed` | Il workflow è stato ripreso |
| `workflow_cancelled` | Il workflow è stato annullato |
| `workflow_rewound` | Il workflow è stato riportato a un passaggio precedente |
| `workflow_forked` | Il workflow è stato diramato in un nuovo workflow |
| `workflow_deadline_exceeded` | Il workflow non ha rispettato la scadenza `must_complete_within()` |
| `debug` | Messaggio a livello di debug (quando `QUEUETY_DEBUG` è attivo) |

## Campi dei log

Ogni voce di log contiene:

| Campo | Descrizione |
|---|---|
| `id` | ID incrementale automatico |
| `event` | Stringa del tipo di evento |
| `handler` | Nome o classe del gestore |
| `job_id` | ID del job associato (nullable) |
| `workflow_id` | ID del workflow associato (nullable) |
| `step_index` | Indice del passaggio del workflow (nullable) |
| `attempt` | Numero del tentativo |
| `duration_ms` | Durata dell'esecuzione in millisecondi |
| `error_message` | Messaggio di errore in caso di fallimento |
| `created_at` | Timestamp |

## Interrogare i log tramite 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 );
```

## Interrogare i log tramite 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
```

## Conservazione dei log

I log vengono conservati finché non li eliminate. La costante `QUEUETY_LOG_RETENTION_DAYS` viene letta da `Config::log_retention_days()`, ma al momento non viene usata, quindi non elimina nulla ([#15](https://github.com/inline0/queuety/issues/15)). Non è possibile raggiungere neppure il sottocomando `wp queuety log purge` ([#11](https://github.com/inline0/queuety/issues/11)).

Eliminate i log da PHP, ad esempio tramite un'attività pianificata personalizzata o con `wp eval`:

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