
# Registro em log

Queuety registra todos os eventos de jobs e workflows na tabela de banco de dados `queuety_logs`. Não há arquivos de log. Todas as entradas podem ser consultadas por meio de PHP API e CLI.

## Tipos de evento

Cada entrada de log tem um tipo de evento do enum `LogEvent`:

| Evento | Descrição |
|---|---|
| `started` | A execução do job foi iniciada |
| `completed` | O job foi concluído com sucesso |
| `failed` | Uma tentativa lançou uma exceção e será repetida (a tentativa final registra somente `buried`) |
| `buried` | O job esgotou todas as tentativas de repetição |
| `retried` | O job foi agendado para nova tentativa |
| `workflow_started` | O workflow foi despachado |
| `workflow_completed` | Todas as etapas do workflow foram concluídas |
| `workflow_failed` | A etapa do workflow falhou permanentemente |
| `workflow_paused` | O workflow foi pausado |
| `workflow_resumed` | O workflow foi retomado |
| `workflow_cancelled` | O workflow foi cancelado |
| `workflow_rewound` | O workflow foi retrocedido para uma etapa anterior |
| `workflow_forked` | O workflow foi dividido em um novo workflow |
| `workflow_deadline_exceeded` | O workflow perdeu o prazo `must_complete_within()` |
| `debug` | Mensagem de nível de depuração (quando `QUEUETY_DEBUG` está ativado) |

## Campos do log

Cada entrada de log contém:

| Campo | Descrição |
|---|---|
| `id` | ID incrementado automaticamente |
| `event` | String do tipo de evento |
| `handler` | Nome ou classe do handler |
| `job_id` | ID do job associado (pode ser nulo) |
| `workflow_id` | ID do workflow associado (pode ser nulo) |
| `step_index` | Índice da etapa do workflow (pode ser nulo) |
| `attempt` | Número da tentativa |
| `duration_ms` | Duração da execução em milissegundos |
| `error_message` | Mensagem de erro em caso de falha |
| `created_at` | Registro de data e hora |

## Consultar logs por meio de 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 );
```

## Consultar logs por meio de 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
```

## Retenção de logs

Os logs são mantidos até que você os apague. A constante `QUEUETY_LOG_RETENTION_DAYS` é lida por `Config::log_retention_days()`, mas nada a utiliza ainda; portanto, ela não apaga nada ([#15](https://github.com/inline0/queuety/issues/15)). Também não é possível acessar o subcomando `wp queuety log purge` ([#11](https://github.com/inline0/queuety/issues/11)).

Apague os logs por meio de PHP, por exemplo, em uma tarefa agendada sua ou com `wp eval`:

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